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...