目錄
一、标準IO
1.fopen
2.fclose
3.fgetc
4.fputc
5.fgets
6.fputs
7.fread
8.fwrite
9.fseek
10.ffulsh
二、系統IO
1.open
2.close
3.read
4.write
一、标準IO
1.fopen
FILE *fopen(const char *pathname, const char *mode);
以mode的形式打開pathname所指向的檔案,将指向檔案的指針傳回。
傳回:成功傳回檔案,檔案打開失敗傳回NULL。
例:FILE *fp;
fp = fopen("wenjianming",r);
if(fp==NULL)
{
perror("fopen()");
}
errno:錯誤類型的标号
perror:最後一次的錯誤資訊
strerror:将錯誤類型标号轉換成錯誤資訊
mode的類型:
r | 以隻讀方式打開檔案,檔案必須存在。 |
r+ | 以讀寫方式打開檔案,檔案必須存在。 |
w | 打開隻寫檔案,若檔案存在則檔案長度清為零,即該檔案内容會消失;若檔案不存在則建立該檔案。 |
w+ | 打開讀寫檔案,若檔案存在則檔案長度清為零,即該檔案内容會消失;若檔案不存在則建立該檔案。 |
a | 附加的方式打開隻寫檔案。若檔案不存在,則會建立該檔案;如果檔案存在,則寫入的資料會被加到檔案尾後,即檔案原先的内容會被保留 |
a+ | 附加方式打開可讀/寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,則寫入的資料會被加到檔案尾後,即檔案原先的内容會被保留 |
2.fclose
int fclose(FILE *stream);
連續打開檔案不關閉時,最多打開1024個檔案
傳回:如果流成功關閉,fclose 傳回 0,否則傳回EOF。
例:fclose(fp);
3.fgetc
int fgetc(FILE *stream);
從檔案的第一個字元,一個位元組向後讀取,stream向後移動。
傳回:成功傳回字元,如果到了檔案的結尾或遇到讀錯誤,将傳回EOF。
例:fgetc(fp);
4.fputc
int fputc(int c, FILE *stream);
将字元c寫到檔案指針fp所指向的檔案的目前寫指針的位置。
傳回:在正常調用情況下,函數傳回寫入檔案的字元的ASCII碼值,出錯時,傳回EOF
例:fputc(c,fp);
5.fgets
char *fgets(char *s, int size, FILE *stream);
從指定的流 stream 讀取一行,并把它存儲在s所指向的字元串内。當讀取size-1個字元時,或者讀取到換行符時,或者到達檔案末尾時,停止。
傳回 :如果成功,該函數傳回相同的 str 參數。如果到達檔案末尾或者沒有讀取到任何字元,str 的内容保持不變,并傳回一個空指針。如果發生錯誤,傳回一個空指針。
例:char a[n];
fgets(a,n,fp);
6.fputs
int fputs(const char *s, FILE *stream);
把字元串寫入到指定的流
傳回:該函數傳回一個非負值,如果發生錯誤則傳回 EOF
例:fputs(a,fp);
7.fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
從stream流中讀取nmemb個元素,每個元素大小為size個位元組,儲存到ptr數組中
傳回:傳回成功讀取的對象個數,若出現錯誤或到達檔案末尾,則可能小于count。
ptr ------ 這是指向要被寫入的元素數組的指針。
size ------ 這是要被寫入的每個元素的大小,以位元組為機關。
nmemb------ 這是元素的個數,每個元素的大小為 size 位元組。
stream ------ 這是指向 FILE 對象的指針,該 FILE 對象指定了一個輸出流
例:fread(a,1,32,fp);
8.fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
将ptr數組中nmemb個元素,每個元素大小為size個位元組,寫入到stream中
傳回:如果成功,該函數傳回一個 size_t 對象,表示元素的總數,該對象是一個整型資料類型。如果該數字與 nmemb 參數不同,則會顯示一個錯誤。
例:fwrite(a,1,32,fp);
9.fseek
int fseek(FILE *stream, long offset, int whence);
函數設定檔案指針stream的位置。如果執行成功,stream将指向以fromwhere(SEEK_SET),(SEEK_CUR),(SEEK_END))為基準,偏移offset個位元組的位置。
傳回值:成功,傳回0,失敗傳回非0值,并設定error的值
例:fseek(fp,10,SEEK_END);
10.ffulsh
int fflush(FILE *stream);
功能是沖洗流中的資訊。
緩沖區:暫存空間,大多數情況下,緩沖區的存在是件好事,作用合并系統調用
行緩沖:stdout,換行時,滿了時,強制重新整理
全緩沖:預設,(隻要不是終端裝置,全采用全緩沖模式)滿了時,強制重新整理
無緩沖:stderr,需要立即輸出
例:fflush(fp);
二、系統IO
1.open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
将pathname以flags形式打開
pathname 字元串表達式,指定檔案名
flags
O_RDONLY | 隻讀方式 |
O_WRONLY | 隻寫方式 |
O_RDWR | 可讀可寫方式 |
O_APPEND | 從檔案尾部開始讀寫檔案,所寫入的資料追加到檔案尾 |
O_TRUNC | 若檔案存在并且以可寫的方式打開時,将檔案長度清為0 |
O_CREAT | 若路徑中的檔案不存在則自動建立該檔案 |
mode 檔案的權限類型
例:open(fp,O_RDONLY);
open(fp,O_WRONLY | O_CREAT,0664);
2.close
int close(int fd);
例:close(fp);
3.read
ssize_t read(int fd, void *buf, size_t count);
count是讀取的位元組數,資料儲存在緩沖區buf中,同時檔案的目前讀寫位置向後移
成功傳回讀取的位元組數,出錯傳回-1并設定errno,如果在調read之前已到達檔案末尾,則這次read傳回0。
例:read(fp,a,5);
4.write
ssize_t write(int fd, const void *buf, size_t count);
将buf中count個位元組數寫入到fd中
傳回:如果順利write()會傳回實際寫入的位元組數。當有錯誤發生時則傳回-1,存入errno中
例:write(fp,a,5);
注:本文是通過聽李慧芹老師上課記的筆記,如有了解不到位請多多包涵,也請多多指教