linuxc程式設計 檔案操作 部分函式

2021-10-04 19:45:18 字數 4683 閱讀 9572

標頭檔案:

#include//在centos6.0中只要此標頭檔案就可以

#include#incldue

功能:開啟和建立檔案(建立乙個檔案描述符,其他的函式可以通過檔案描述符對指定檔案進行讀取與寫入的操作。)

函式原型:

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

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

引數說明:

1.pathname

要開啟或建立的目標檔案

2.flags

開啟檔案時,可以傳入多個引數選項,用下面的

乙個或者多個常量進行「或」運算,構成falgs

常用引數:

o_rdonly: 唯讀開啟

o_wronly: 只寫開啟

o_rdwr: 讀,寫開啟

這三個常量,==必須制定乙個且只能指定乙個==

o_creat: 若檔案不存在,則建立它,需要使

用mode選項。來指明新檔案的訪問許可權

返回值:

成功:新開啟的檔案描述符

失敗:-1

open返回的檔案描述符一定是最小的而且沒有被使用的

標頭檔案:

#include
功能:關閉乙個已經開啟的檔案

原型:

int close(int fd)

引數說明:

fd:是需要關閉的檔案描述符

返回值:

成功:返回0;

失敗:返回-1,並設定errno

開啟的檔案描述符一定要記得關閉,否則資源會被大量的占用,導致記憶體不夠

例項:

開啟的檔案存在時:

#include#include#include#include#includeint main()

const char*msg="hello open\n";

int count = 6;

while(count--)

close(fd);

return 0;

}

開啟的檔案不存在時:

#include#include#include#include#includeint main()

const char*msg="hello file\n";

int count=10;

while(count--)

close(fd);

return 0;

}

標頭檔案:

#include
原型:

ssize_t write(int fd,const void*buf,size_t count);
引數說明:

fd:是檔案描述符(write所對應的是寫,即就是1)

buf:通常是乙個字串,需要寫入的字串

count:是每次寫入的位元組數

返回值:

成功:返回寫入的位元組數

失敗:返回-1並設定errno

ps: 寫常規檔案時,write的返回值通常等於請求寫的位元組

數count, 而向終端裝置或者網路寫時則不一定

標頭檔案:

#incldue
功能:用於從檔案描述符對應的檔案讀取資料(從開啟的裝置或檔案中讀取資料)

原型:

ssize_t read(int fd,void*buf,size_t count)
引數說明:

fd:      是檔案描述符

buf: 為讀出資料的緩衝區;

count: 為每次讀取的位元組數(是請求讀取的位元組數,讀上來的資料保

存在緩衝區buf中,同時檔案的當前讀寫位置向後移)

返回值:

成功:返回讀出的位元組數 

失敗:返回-1,並設定errno,如果在呼叫read

之前到達檔案末尾,則這次read返回0

**:

#include#include#includeint main()

; read(0,buf,len);//read所對應的檔案描述符為0

return 0;

}

fread函式read函式的區別:

1.fread函式是封裝好的庫函式,而read函式是系統函式,一般來說,fread效率更高; 

2.讀取檔案的差別:fread函式功能更強大,可以讀取結構體的二進位制檔案,但是如果是最底層的操作,用到檔案描述符的話,用read會更好。

標頭檔案:

#include#incldue
函式原型:

off_t lseek(int fildes, off_t offset, int whence)
引數fildes offset:

引數fildes為已開啟的檔案描述詞

引數offset為根據引數whence來移動讀寫位置的位移數。

引數whence為下列其中一種:

seek_set 引數offset即為新的讀寫位置

seek_cur 當前讀寫位置後增加offset個位移量。

seek_end 將讀寫位置指向檔案尾後再增加offset個位移量

當whence值為seek_cur或seek_end時,引數offset允許負值的出現

函式說明:

下列是較特別的使用方式:

(1)欲將讀寫位置移到檔案開頭時:lseek(int fildes, 0, seek_set)

(2)欲將讀寫位置移到檔案尾時時:lseek(int fildes, 0, seek_end)

(3)欲將取得目前檔案位置時:lseek(int fildes, 0, seek_cur)

返回值:

當呼叫成功時則返回目前的讀寫位置,也就是距離檔案開頭多少個字元。若有錯誤則返回-1, errno會存放錯誤**。

函式原型:

#incldue int dup (int oldfd)

int dup2(int oldfd,int newfd)

說明:

dup/dup2:進行檔案描述符的重定向即建立乙個oldfd的副本。 

dup:最低編號、未被使用的檔案描述符是oldfd的乙份拷貝。

dup2:newfd是oldfd的乙份拷貝。

返回值:

返回值:成功(newfd); 失敗(-1)。
例項:

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

函式原型:

#include #include #include int stat(const char *path, struct stat *buf);

int fstat(int fd, struct stat *buf);

int lstat(const char *path, struct stat *buf);

三個函式的返回值:

若成功則返回0,若出錯則返回-1
介紹:

stat函式根據pathname路徑返回與此命名檔案有關的資訊結構

fstat根據檔案描述符獲取有關資訊結構

lstat類似於stat,但是當命名檔案是乙個符號鏈結時,lstat返回該符號鏈結的有關資訊,而不是由該符號鏈結引用的檔案資訊

存放屬性的結構體(struct stat *buf):

struct stat ;
例項:

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

if(stat(ar**[1],&buf)==-1)

printf("device : %d\n",buf.st_dev);

printf("inode : %d\n",buf.st_ino);

printf("mode : %o\n",buf.st_mode);

}

博主資歷尚淺,有什麼不對的地方,還望斧正。

今天先寫到這兒,明天繼續寫剩下的函式

學習Linux C程式設計之檔案操作

1 fopen函式 fopen函式類似於系統呼叫中的open函式。和open一樣,它返回檔案的識別符號,只是這裡叫做流 stream 在庫函式裡實現為乙個指向檔案的指標。如果需要對裝置的行為進行明確的控制,最好使用底層系統呼叫,因為這可以避免使用庫函式帶來的一些非預期的 如輸入 輸出緩衝。函式原型 ...

linux c程式設計 資料夾操作

建立目錄 用mkdir 函式建立目錄 mkdir const char pathname,mode t mode 引數mode 有下列的組合 s isuid 04000 檔案的執行時設定使用者id set user id on execution 位s isgid 02000 檔案的執行時設定組id...

Linux C 檔案操作

系統呼叫比標準庫移植性差 不同os介面不一定一致 系統呼叫會進入核心態,對程式執行的開銷較大.預設檔案描述符 0 標準輸入 1 標準輸出 2 標準錯誤輸出 include include include include include define maxline 80 void if error ...