Linux 檔案操作 API

2021-10-12 21:57:06 字數 4281 閱讀 8309

linux檔案操作

一、6個系統呼叫,不帶緩衝的i/o操作

creat open read write lseek close

標頭檔案:stdio.h stdlib.h sys/types.h sys/stat.h unistd.h fcntl.h

返回值 發生錯誤返回-1,錯誤**errno中

2.open函式

int open(const char *pathname,int flags)

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

pathname指向欲開啟的檔案路徑字串

flags就是剛才一些常用的巨集,如果flag引數裡有o_creat,表示如果該檔案不存在,系統自動建立該檔案,該檔案的許可權由第三個引數決定。

返回值:0表示成功 1表示失敗

3.read函式

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

把引數fd所指檔案傳送count個位元組到buf所指的記憶體中

返回值為實際讀到的位元組數,有錯誤發生時返回-1,錯誤**存入errno中,而檔案讀寫位置無法預期。最好是將返回值與count比較,若返回的位元組數小,則可能讀到了檔案末尾。

4.write函式

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

把buf所指的記憶體中寫入count個位元組到引數fd所指檔案中。返回實際寫入的位元組數,有錯誤發生時返回-1,錯誤**存入errno中。

5.lseek函式

off_t lseek(int fd, off_t offset, int whence)

引數whence為下列選項的其中一種:

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

seek_cur 以目前的讀寫位置往後增加offset個位移量

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

呼叫成功返回目前讀寫位置,錯誤返回-1

6.close函式

關閉已開啟的檔案,成功返回0,有錯誤發生返回eof,錯誤**存入errno中。

二、c庫函式的檔案操作函式

1.fopen函式

file *fopen(const char *path, const char *mode)

mode:

r 唯讀方式開啟,檔案必須存在

r+讀寫方式開啟,檔案必須存在

w 只寫方式開啟,若檔案存在則長度清零,不存在則建立

w+ 讀寫方式開啟,若檔案存在則長度清零,不存在則建立.

a 以附加方式開啟只寫檔案,若不存在則建立,存在則寫入的資料追加到檔案末尾

a+讀寫方式開啟,檔案不存在則建立,檔案存在追加寫入

上述字串都可以再加乙個b字元,告訴函式庫開啟的檔案為二進位制檔案而非單純文字檔案,不過在posix系統中都會hulve該字元

檔案順利開啟返回指向該檔案流的指標,開啟失敗返回null

2.fclose函式

關閉開啟的檔案,成功返回0,失敗返回eof

3.fdopen函式

file *fdopen(int filds, const char *mode)

用於將檔案描述詞轉換為檔案指標。

fdopen會將引數filds的檔案描述詞轉換為對應的檔案指標後返回,引數mode字串則代表著檔案指標的流形態,此形態必須和原先檔案描述詞讀寫模式相同。

成功返回指向該流的檔案指標,失敗返回null

4.fread函式

size_t read(void *ptr, size_t size, size_t nmemeb, file *stream)

用於從檔案流中讀取資料

引數ptr指向欲存放讀取進來的資料空間,讀取字元數由引數size *nmemb來決定。返回實際讀取到的nmemb數目,如果此值比nmemb小,則可能讀到了檔案尾或有錯誤發生。用feof或ferror函式判定發生了什麼情況。

5.fwrite函式

用於將資料寫入檔案流

size_t write(const void *ptr, size_t size, size_t nmemb, file *stream)

ptr指向欲寫入的資料位址,總共寫入的字元數由引數size *nmemb來決定,返回實際寫入的nmemb數目。

6.fseek函式

int fseek(file *stream, long offset, int whence)

和lseek差不多。呼叫成功返回0,有錯誤返回-1。不會像lseek一樣返回讀寫位置,因此必須使用ftell來取得當前讀寫位置。

7.ferror函式

ferror(file*)

ferror,函式名,在呼叫各種輸入輸出函式(如 putc.getc.fread.fwrite等)時,如果出現錯誤,除了函式返回值有所反映外,還可以用ferror函式檢查。 它的一般呼叫形式為 ferror(fp);如果ferror返回值為0(假),表示未出錯。如果返回乙個非零值,表示出錯。應該注意,對同乙個檔案 每一次呼叫輸入輸出函式,均產生乙個新的ferror函 數值,因此,應當在呼叫乙個輸入輸出函式後立即檢 查ferror函式的值,否則資訊會丟失。在執行fopen函式時,ferror函式的初始值自動置為0。

8.ftell函式

返回當前檔案讀寫位置。

三、fgetc getc getchar getch getche函式

fgetc函式

用於從檔案讀取乙個字元

getc作用和fgetc相同,但getc為巨集定義,非真正的函式呼叫。

getchar函式,用於從標準輸入裝置讀取乙個字元。非真正的函式呼叫,而是getc(stdin)的巨集定義。

getch函式

getch直接從鍵盤獲取鍵值,不等待使用者按回車,只要使用者按乙個鍵,getch就立刻返回, getch返回值是使用者輸入的ascii碼,出錯返回-1. 輸入的字元不會回顯在螢幕上 .getch函式常用於程式除錯中,在除錯時,在關鍵位置顯示有關的結果以待檢視,然後用getch函式暫停程式執行,當按任意鍵後程式繼續執行.每摁一次鍵 就呼叫一次getch(),直到遇回車結束。如果在規定次數前結束,系統裡面 並 沒有存入結束符 ,我們要手動地在他末尾新增乙個『\0』字元

getche函式

從控制台讀取字元,立即回顯

兩者的區別是: getch()函式不將讀入的字元回顯在顯示螢幕上, 而getche()函式卻將讀入的字元回顯到顯示螢幕上(getche()讀入之後不管按不按回車立即回顯)。利用回顯和不回顯的特點, 這兩個函式經常用於互動輸入的過程中完成暫停等功能。

四、fputc putc putchar

fputc函式

用於將一指定字元寫入檔案流中,成功返回寫入成功的字元,返回eof表示寫入失敗。

putc

用於將一指定的字元寫入檔案,非真正的函式呼叫。

putchar

用於將指定的字元寫到標準輸出裝置中。

五、fgets函式和gets函式

fgets函式用於從檔案讀取一字串,直到出現換行符、讀到檔案尾或者讀了size-1個字元位置,最後會加上null作為字串結束。

gets函式用於從標準裝置讀入字元並儲存到引數s所指的記憶體空間中,知道出現換行符或到檔案末尾,最後加上null結束。由於gets函式無法知道s的大小,必須遇到換行符或檔案為尾才結束輸入,因此容易出現緩衝溢位的安全問題。

五、fprintf函式 sprintf函式

fprintf函式

用於格式化輸出資料至檔案。

int fprintf(file *stream, const char *format,…)

根據引數format字串來轉換並格式化資料,在將結果輸出到引數stream指定的檔案中,知道出現\0結束。

sprintf函式

用於格式化字串複製

sprintf(char *str, const char *format,…)

根據引數format字串來轉換並格式化資料,再將結果複製到引數str所指定的字串陣列中,直到出現\0

成功返回str字串長度,失敗返回-1。

六、fscanf sscanf

fscanf函式

用於格式化字串輸入

int fscanf(file *stream, const char *format…)

從檔案流中格式化讀取字串,轉換後的結構存於對應的引數內。

成功返回引數數目,失敗返回-1

sscanf函式

int sscanf(const char *str, const *format,…)

用於格式化字串輸入,轉換後的結果存於對應的引數內。

成功返回引數數目,失敗返回-1。

Linux 檔案操作API詳解

開啟檔案 open函式 int open const char pathname,int flags,mode t mode int open const char pathname,int flags 標頭檔案 include include include 函式說明 引數pathname 指向欲...

Linux C檔案操作API

linux c 檔案操作api 初步學習 creat 建立檔案 相關函式 read,write,fcntl,close,link,stat,umask,unlink,fopen 表頭檔案 include include include 定義函式 int creat const char pathna...

檔案操作 API 函式介紹

在vc中,大多數情況對檔案的操作都使用系統提供的 api 函式,但有的函式我們不是很熟悉,以下提供一些檔案操作 api 函式介紹 一般檔案操作 api createfile 開啟檔案 要對檔案進行讀寫等操作,首先必須獲得檔案控制代碼,通過該函式可以獲得檔案控制代碼,該函式是通向檔案世界的大門。rea...