一 Linux檔案操作

2021-10-01 06:57:41 字數 2743 閱讀 2699

在 linux 的世界裡,一切裝置皆檔案。我們可以使用系統呼叫中 i/o 的函式(i:input,輸入;o:output,輸出),對檔案進行相應的操作( open()、close()、write() 、read() 等)。

開啟現存盤案或新建檔案時,系統(核心)會返回乙個檔案描述符,檔案描述符用來指定已開啟的檔案。這個檔案描述符相當於這個已開啟檔案的標號,檔案描述符是非負整數,是檔案的標識,操作這個檔案描述符相當於操作這個描述符所指定的檔案。

程式執行起來後(每個程序)都有一張檔案描述符的表,標準輸入、標準輸出、標準錯誤輸出裝置檔案被開啟,對應的檔案描述符 0、1、2 記錄在表中。程式執行起來後這三個檔案描述符是預設開啟的。

#define stdin_fileno  0 //標準輸入的檔案描述符

#define stdout_fileno 1 //標準輸出的檔案描述符

#define stderr_fileno 2 //標準錯誤的檔案描述符

在程式執行起來後開啟其他檔案時,系統會返回檔案描述符表中最小可用的檔案描述符,並將此檔案描述符記錄在表中。linux 中乙個程序最多只能開啟 nr_open_default (即1024)個檔案,故當檔案不再使用時應及時呼叫 close() 函式關閉檔案。

#include #include #include int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

功能: 開啟檔案,如果檔案不存在則可以選擇建立。

引數: pathname:檔案的路徑及檔名

flags:開啟檔案的行為標誌,必選項 o_rdonly, o_wronly, o_rdwr

mode:這個引數,只有在檔案不存在時有效,指新建檔案時指定檔案的許可權

返回值:

成功:成功返回開啟的檔案描述符

失敗:-1

flags取值:

mode: 這個引數,只有在檔案不存在時有效,指新建檔案時指定檔案的許可權

功能: 關閉已開啟的檔案

引數: fd : 檔案描述符,open()的返回值

返回值:

成功:0

失敗: -1, 並設定errno

需要說明的是,當乙個程序終止時,核心對該程序所有尚未關閉的檔案描述符呼叫close關閉,所以即使使用者程式不呼叫close,在終止時核心也會自動關閉它開啟的所有檔案。

但是對於乙個長年累月執行的程式(比如網路伺服器),開啟的檔案描述符一定要記得關閉,否則隨著開啟的檔案越來越多,會占用大量檔案描述符和系統資源。

#include ssize_t read(int fd, void *buf, size_t count);

功能: 把指定數目的資料讀到記憶體(緩衝區)

引數: fd : 檔案描述符

buf : 記憶體首位址

count : 讀取的位元組個數

返回值:

成功:實際讀取到的位元組個數

失敗: - 1

#include ssize_t write(int fd, const void *buf, size_t count);

功能: 把指定數目的資料寫到檔案(fd)

引數: fd : 檔案描述符

buf : 資料首位址

count : 寫入資料的長度(位元組)

返回值:

成功:實際寫入資料的位元組個數

失敗: - 1

實現檔案拷貝功能的程式。

#include #include #include #include #include #include #define size 128

int main(int argc, char **ar**)

//以唯讀的方式開啟乙個檔案

fin = open(ar**[1], o_rdonly);

if (-1 == fin)

//開啟檔案

fout = open(ar**[2], o_wronly | o_creat | o_trunc, 0644);

if (-1 == fout)

while(1)

//關閉檔案

close(fin);

close(fout);

return 0;

err2:

close(fout);

err1:

close(fin);

err0:

return -1;

}

編譯和測試

linux系統檔案操作函式(一)

1 stat函式 標頭檔案 include include 函式原型 int stat const char file name,struct stat buf 函式說明 通過檔名filename獲取檔案資訊,並儲存在buf所指的結構體stat中 返回值 執行成功則返回0,失敗返回 1,錯誤 存於e...

Linux檔案的IO操作 一

系統呼叫 為了更好地保護核心空間,將程式的執行空間分為核心空間和使用者空間 也就是常稱的核心態和使用者態 它們分別執行在不同的級別上 在邏輯上是相互隔離的 因此 使用者程序在通常情況下不允許訪問核心資料 也無法使用核心函式,它們只能在使用者空間操作使用者資料 呼叫使用者空 間的函式 通過 檔案描述符...

linux 檔案操作

1 cat 開啟檔案 cat name.txt 開啟檔案name.txt cat 1.txt 2.txt 開啟2個檔案 cat n name.txt 開啟檔案後顯示行號 2 vi 輸出,刪除,查詢,替換,塊操作 等文字操作 vi 的三種基本工作模式 命令列模式,文字輸入模式,末行模式 命令列模式 不...