linuxc不帶快取的檔案操作

2021-07-23 18:27:48 字數 1973 閱讀 9587

系統呼叫

指作業系統提供給使用者程式呼叫的一組「特殊」介面,使用者程式可以通過這組介面來獲得作業系統核心提供的服務,例如使用者可以用來建立程序等。

系統呼叫關係圖:

從上圖可以看出系統將程式的執行空間分為了核心空間和使用者空間,通過api介面實現系統呼叫,目的是保護系統的核心。

不帶快取的檔案i/o操作:

(1)creat函式

函式的作用:建立乙個新檔案

函式的原型:int  creat(const  char  *filename,mode_t  mode);

標頭檔案:#include

#include

#include

返回值:執行成功,返回新的檔案描述符;執行出錯,返回-1。

函式引數:

fliename:檔名或檔案路徑

mode:建立檔案的模式:①s_irusr  可讀

②s_iwusr  可寫

③s_ixusr   可執行

(2)open函式

函式的作用:開啟乙個檔案

函式的原型:①int  open(const  char  *pathname,int  flags);(所開啟檔案存在下使用)

②int  open(const  char  *pathname,int  flags,mode_t  mode);(所開啟檔案不存在時建立並開啟)

標頭檔案:

#include

#include

#include

返回值:執行成功,返回新分配的檔案描述符;執行出錯,返回-1。

引數:對於引數flags有以下幾種:

① o_creat:若檔案不存在,該引數可以建立該檔案

② o_rdonly:以唯讀方式開啟檔案

③ o_wronly:以只寫方式開啟檔案

④ o_rdwr:以可讀寫方式開啟檔案

(4)read函式

函式的作用:從開啟的檔案中讀取資料

函式的原型:ssize_t  read(int  fd,void  *buf,size_t  count);

標頭檔案:#include

返回值:執行正常時,返回實際讀取到的位元組數;若讀取檔案結束或者無資料讀取時,返回0;執行出錯,返回-1。

引數:fd:檔案描述符

buf:檔案讀取到的資料存放的位址

count:要讀取資料的大小

(5)write函式

函式的作用:向開啟的檔案中寫入資料

函式的原型:ssize_t  write(int  fd,const  void   *buf,size_t  count);

標頭檔案:#include

返回值:執行成功,返回實際寫入檔案中的位元組數,寫入位元組數又分三種情況:全寫入、部分寫入及0個寫入;

執行出錯,返回-1。

引數:fd:函式描述符

buf:寫入檔案的資料所在的首位址,這裡可以是字串或者是陣列名或指標

count:寫入資料的大小

(6)lseek函式

函式的作用:對檔案進行定位

函式的原型:int  lseek(int  fd,offset_t  offset,int  whence);

標頭檔案:#include

#include

返回值:執行成功,返回檔案當前指標到檔案頭之間的位元組數;

執行出錯,返回-1。

引數:fd:檔案描述符

offset:表示指標的微調量的大小,對指標的位置進行微調,取正值時將指標從當前位置向後移動offset個單位,取負值則向前移動

whence:指標的位置

① seek_set:將檔案指標放在檔案首

② seek_cur:將檔案指標放在當前位置

③ seek_end:將檔案指標放在檔案末尾

獲取檔案的大小可以將檔案指標放在檔案末尾即可。

不帶快取操作的I O操作(1)

函式的作用 建立乙個檔案 函式的原型 int creat const char filename,mode t mode 函式的引數 mode 為建立模式 可讀 s irusr 可寫 s iwusr 標頭檔案 include include include返回值 成功 新的檔案描述符 失敗 1 函式...

不帶快取的檔案操作用到的幾個的函式

不帶快取的檔案i o操作,主要用到 6個函式 creat,open,read,write,lseek,close.這裡的不帶快取是指每乙個函式都只呼叫系統中的函式,這些函式雖然不是ansi c 的組成部分,但卻是posix的組成部分。下面就來介紹一下這幾個函式 1.creat 函式的作用 建立檔案 ...

Linux C 檔案操作

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