Linux C檔案操作API

2021-10-23 02:45:18 字數 2823 閱讀 7890

linux c 檔案操作api 初步學習

creat(建立檔案)

相關函式

read,write,fcntl,close,link,stat,umask,unlink,fopen

表頭檔案

#include

#include

#include

定義函式

int creat(const char * pathname, mode_tmode);

函式說明

引數pathname指向欲建立的檔案路徑字串。creat()相當於使用下列的呼叫方式呼叫open()

open(const char * pathname ,(o_creat|o_wronly|o_trunc));

錯誤**

關於引數mode請參考open()函式。

返回值creat()會返回新的檔案描述詞,若有錯誤發生則會返回-1,並把錯誤**設給errno。

eexist 引數pathname所指的檔案已存在。

eaccess 引數pathname 所指定的檔案不符合所要求測試的許可權

erofs 欲開啟寫入許可權的檔案存在於唯讀檔案系統內

efault 引數pathname 指標超出可訪問的記憶體空間

einval 引數mode 不正確。

enametoolong 引數pathname太長。

enotdir 引數pathname為一目錄

enomem 核心記憶體不足

eloop 引數pathname有過多符號連線問題。

emfile 已達到程序可同時開啟的檔案數上限

enfile 已達到系統可同時開啟的檔案數上限

附加說明

creat()無法建立特別的裝置檔案,如果需要請使用mknod()。

範例請參考open()。

read(由已開啟的檔案讀取資料)

相關函式

readdir,write,fcntl,close,lseek,readlink,fread

表頭檔案

#include

定義函式

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

函式說明

read()會把引數fd 所指的檔案傳送count個位元組到buf指標所指的記憶體中。若引數count為0,則read()不會有作用並返回0。返回值為實際讀取到的位元組數,如果返回0,表示已到達檔案尾或是無可讀取的資料,此外檔案讀寫位置會隨讀取到的位元組移動。

附加說明

如果順利read()會返回實際讀到的位元組數,最好能將返回值與引數count 作比較,若返回的位元組數比要求讀取的位元組數少,則有可能讀到了檔案尾、從管道(pipe)或終端機讀取,或者是read()被訊號中斷了讀取動作。當有錯誤發生時則返回-1,錯誤**存入errno中,而檔案讀寫位置則無法預期。

錯誤**

eintr 此呼叫被訊號所中斷。

eagain 當使用不可阻斷i/o 時(o_nonblock),若無資料可讀取則返回此值。

ebadf 引數fd 非有效的檔案描述詞,或該檔案已關閉。

write(將資料寫入已開啟的檔案內)

相關函式

open,read,fcntl,close,lseek,sync,fsync,fwrite

表頭檔案

#include

定義函式

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

函式說明

write()會把引數buf所指的記憶體寫入count個位元組到引數fd所指的檔案內。當然,檔案讀寫位置也會隨之移動。

返回值如果順利write()會返回實際寫入的位元組數。當有錯誤發生時則返回-1,錯誤**存入errno中。

錯誤**

eintr 此呼叫被訊號所中斷。

eagain 當使用不可阻斷i/o 時(o_nonblock),若無資料可讀取則返回此值。

eadf 引數fd非有效的檔案描述詞,或該檔案已關閉。

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

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

想要取得目前檔案位置時:lseek(int fildes,0,seek_cur);

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

附加說明

linux系統不允許lseek()對tty裝置作用,此項動作會令lseek()返回espipe。

close(關閉檔案)

相關函式

open,fcntl,shutdown,unlink,fclose

表頭檔案

#include

定義函式

int close(int fd);

函式說明

當使用完檔案後若已不再需要則可使用close()關閉該檔案,二close()會讓資料寫回磁碟,並釋放該檔案所占用的資源。引數fd為先前由open()或creat()所返回的檔案描述詞。

返回值若檔案順利關閉則返回0,發生錯誤時返回-1。

錯誤**

ebadf 引數fd 非有效的檔案描述詞或該檔案已關閉。

附加說明

雖然在程序結束時,系統會自動關閉已開啟的檔案,但仍建議自行關閉檔案,並確實檢查返回值。

linux系統空間劃分:使用者空間、核心空間

劃分空間的目的:保護核心空間不能被使用者空間隨便訪問

使用者空間如何訪問核心空間:必須發生系統呼叫

如何發生系統呼叫?呼叫作業系統提供的函式介面–api

學習嵌入式linux系統開發實際上學習的是使用者程式設計介面api

Linux C 檔案操作

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

Linux C 檔案操作

linux 檔案操作 1 linux檔案操作 1.1 系統呼叫 系統呼叫發生核心空間,因此如果在使用者空間的一般應用程式中使用系統呼叫來進行檔案操作,會有使用者空間到核心空間的開銷。但通過系統呼叫來訪問檔案是最直接的方式,系統呼叫函式直接作用於作業系統核心的裝置驅動程式從而實現檔案訪問。檔案描述符f...

Linux c檔案操作總結

這一周以來一直與linux的檔案操作相關系統呼叫打交道,其與c語言中的檔案操作函式有些許相似但又千差萬別.尤其是open 函式的引數,相當複雜,因此作以記錄便於查閱.對於用linux系統呼叫進行檔案的常用操作作以總結 主要是關於open 系統呼叫的各個引數做記錄.簡述 open是unix系統 包括l...