每乙個系統下都有對檔案操作的應用,但是都大致相同,同樣在linux系統中也同樣擁有對檔案的操作。如:檔案描述符、open()函式、close()函式、read()函式、write()函式、檔案偏移lseek()函式、獲取檔案狀態fstat()函式、檔案空間對映mmap()函式、取消mmap()對映的munmap()函式、檔案屬性fcntl()函式和檔案輸入輸出控制ioctl()函式。此處主要說open()函式、close()函式、read()函式、write()函式
一、檔案描述符
檔案描述符是乙個整形的資料,所有對檔案的操作都通過檔案描述符實現。在linux系統中用檔案描述符表示裝置檔案和普通檔案。檔案描述符是檔案系統中連線使用者空間和核心空間的樞紐。而檔案描述符的範圍為0~open_max,它是乙個有限的資源,在使用完畢後需要及時釋放。
在linux系統中有3個已經分配的檔案描述符,即標準輸入、標準輸出和標準錯誤,它們的檔案描述符的值分別為0、1和2.
二、開啟建立檔案open()、create()函式
open()函式的原型:
1int open(const
char *pathname,int
flags);
2int open(const
char *pathname,int flags,mode_t mode);
對於open()函式,在使用時需要包含標頭檔案sys/types.h、sys/stat.h、fcntl.h。通常在使用者通過open()函式開啟pathname指定的檔案後,該函式會返回乙個值,如果開啟成功,返回乙個整形的檔案描述符。再出錯時會返回-1。對於pathname所指的是乙個字串變數,該字串變數的長度一般為1024個位元組。對於超過這個大小以後,系統會自動截斷,選擇最前面的位元組操作。
對於flags變數是檔案標誌變數,用於判定檔案的開啟方式,其中檔案的開啟方式可以為唯讀、只寫或讀寫方式開啟,分別用o_rdonly、o_wronly、o_rdwr表示,並且在開啟檔案的方式時必須使用這三種方式中的其一。在這三個引數中o_rdonly通常定義為0、o_wronly定義為1、o_rdwr定義為2。
除這上述的三種開啟方式外還有其他的一些引數。
o_creat:如果檔案不存在則建立檔案
o_excl :檢視檔案是否存在,如果存在則返回-1
o_trunc:將檔案的長度截斷為0.如果此檔案存在,並且檔案成功開啟,則會將其長度截斷為0。
o_nonblock:以非阻塞方式開啟檔案,預設的是阻塞方式。
1 #include2 #include3 #include4 #include5int main(void)6
二、關閉檔案close()函式
close()函式關閉乙個開啟的檔案,之前開啟檔案所占用的資源。
close()函式的原型:
1 #include2int close(int fd);
close()函式關閉的是乙個檔案描述符,關閉以後此檔案描述符不再指向任何檔案,從而檔案描述符可以再次使用。當函式執行成功時返回0,執行錯誤時返回-1.
close()函式的例子:
1 #include2 #inlcude3 #include4 #include5 #include6int mian(void)7
17close(fd);
18return0;
19 }
三、讀取檔案read()函式
read()函式從開啟檔案中讀取資料,使用者可以對讀入的資料進行操作。
read()函式的原型:
1 #include2 ssize_t read(int fd,void *buf,size_t count);
read()函式從檔案描述符fd對應的檔案中讀取count位元組,放到buf開始的快取區中,如果count為0,read()函式返回0;如果count大於ssize_max,結果不可預料。當read()函式的返回結果為-1時,說明讀取函式有錯誤,在達到檔案末尾時,返回0。
在使用read()函式時,count請求的位元組數量,read()函式不一定能夠讀取這麼多資料,在很多中情況下可以使實際上讀取的位元組數小於請求讀取的位元組數。
如:(1)、讀取普通檔案時,檔案中剩餘的位元組數不夠請求的位元組數。
(2)、當從中斷裝置資料的時候,其預設長度不夠read()函式請求讀取的位元組數。
(3)、當從網路讀取資料時,快取區大小有可能小於讀取請求的資料大小。
read()函式的例子:
1 #include2 #include3 #include4 #include5 #include6int main(void)7
else
else printf("
到達檔案末尾\n");
29}30}
31close(size);
32return0;
33 }
四、寫檔案write()函式
write()函式向開啟的檔案中寫入資料,將使用者的資料儲存到檔案中。與read()函式的含義相似,write()函式向檔案描述符fd寫入資料,資料的大小由count指定,buf為要寫如資料的指標,write()函式返回值為成功寫入資料的位元組數。當檔案寫入失敗時,該函式會返回-1。
write()函式的原型:
1 #include2 ssize_t write(int fd,constvoid *buf,size_t count);
write()函式例子:
1 #include2 #include3 #include4 #include5 #include6 #include7
int main(void)8
Linux 下檔案操作
include include include include include include include include include define s 100 void treedisplay void treecreat void filecreatopen void fileread ...
Linux下檔案操作
1.linux下檔案操作的途徑 1 通過底層檔案系統來實現,要求熟悉底層檔案系統的結構,並且編寫大量 來完成 2 通過呼叫shell來完成,訪問shell介面,但shell返回的資訊不便於程式的分析 3 通過系統呼叫來實現,能夠完成相應的功能,並且返回足夠的資訊 2.linux下檔案操作的方式 1 ...
Linux下檔案操作
1.linux下檔案操作的途徑 1 通過底層檔案系統來實現,要求熟悉底層檔案系統的結構,並且編寫大量 來完成 2 通過呼叫shell來完成,訪問shell介面,但shell返回的資訊不便於程式的分析 3 通過系統呼叫來實現,能夠完成相應的功能,並且返回足夠的資訊 2.linux下檔案操作的方式 1 ...