天天看點

apue标準IO和系統IO一、标準IO二、系統IO

目錄

一、标準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+ 打開讀寫檔案,若檔案存在則檔案長度清為零,即該檔案内容會消失;若檔案不存在則建立該檔案。
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

apue标準IO和系統IO一、标準IO二、系統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 若路徑中的檔案不存在則自動建立該檔案
apue标準IO和系統IO一、标準IO二、系統IO

        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);

注:本文是通過聽李慧芹老師上課記的筆記,如有了解不到位請多多包涵,也請多多指教