標準IO----簡單使用

標準IO

  • 出現的緣由:C語言標準委員會,爲了統一編程接口
  • Linux:y一切皆文件
  • 標準IO爲了減小磁盤的損耗,減小讀寫次數,對文件分配了輸入輸出兩個緩衝區,struct FILE
  • 緩衝區的大小(setbuf()設置):
    • 全緩衝:默認狀況
    • 行緩衝:printf()
    • 無緩衝:perror()

1 函數接口:

1.1 打開—->fopen()

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
  • FILE *fopen(const char *path, const char *mode);
    • path: 要打開的文件;
    • mode: 以什麼方式打開;
      • r 以只讀方式打開,若是沒有該文件,則會報錯,打開後,讀指針在文件開頭。
      • r+ 以讀寫方式打開,其餘與r方式相同。
      • w 以只寫方式打開,若是文件沒有,則新建立。若是有,則會把原來內容清空,寫指針在文件開頭。
      • w+ 以讀寫方式打開,其餘與w相同
      • a append的簡寫,追加打開,文件不存在,則建立。 打開後,讀寫指針在文件尾部
      • a+ 與a相同,讀指針在開頭,寫指針在尾部。
    • 返回值:
      • 正確:指向你打開的文件的FILE結構。
      • 錯誤,NULL
    • 下面三個文件系統會自動打開,直接用就能夠:
      • FILE *stdin
      • FILE *stdout
      • FILE *stderr

1.2 關閉—->fclose()

  • int fclose(FILE *fp);
    • fp:前面用fopen打開的返回值

1.3 文件的讀寫

  • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    • ptr: 從stream文件裏讀到的信息存放到ptr爲首地址的地方
    • size:讀數據的單位
    • nmemb:讀多少個上面的單位
    • stream:從哪裏讀
    • 返回值:真正讀到多少個單位,而不是字節數!!!!
    • 件stream的讀指針向移動(返回值*單位大小)個字節
  • size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
    • ptr: 要將ptr爲首地址的數據寫入到stream文件
    • size:要寫數據的單位
    • nmemb:寫多少個上面的單位
    • stream:寫到哪裏去
    • 返回值:真正讀到多少單位
    • 文件stream的讀指針向移動(返回值*單位大小)個字節
  • int fgetc(FILE *stream);
    • fuction:從文件中讀取一個字符
    • return:字符的ASCII
    • 讀指針:讀出一個字符後,讀指針自動日後跳一個
  • int fputc(int c, FILE *stream);
    • function:往文件中寫一個字符
  • char *fgets(char *s, int size, FILE *stream);
    • function:從stream流讀的數據存放的位置。
    • size:要讀的大小
    • stream:打開的文件
    • 返回:fgets讀完了數據後,會自動在s的尾部加換行符\n,會將stream的讀指針挪到第二行
    • 不會忽略空格
  • int fputs(const char *s, FILE *stream);
    • function:網文件中寫一個字符

1.4 判斷文件是否結束feof()

  • if/while(feof(fp)) 若是fp結束爲真
  • if/while(!feof(fp)) 若是fp沒結束爲真
  • feof不太穩定,已經結束了,判斷沒結束

1.5 格式化

  • int fscanf(FILE *stream, const char *format, …);
    • function:從stream裏按format的格式讀出數據
    • …:若干個讀出來的數據項地址
    • 返回值:真正讀出的數據項的個數
  • int sscanf(const char *str, const char *format, …);
    • function:從str這個字符串中讀數據
  • int fprintf(FILE *stream, const char *format, …);
    • 將…的數據按format格式寫入到文件stream中,不過這個函數不安全,容易越界
  • int snprintf(char *str, size_t size, const char *format, …);
    • function:同上
    • size:最多寫多少個字符

1.6 沖洗函數

  • int fflush(FILE *stream);
    • 若是stream是輸入流,則丟棄stream的緩衝區

1.7 定位函數

  • int fseek(FILE *stream, long offset, int whence);
  • long ftell(FILE *stream);
  • void rewind(FILE *stream);
  • int fgetpos(FILE *stream, fpos_t *pos);
  • int fsetpos(FILE *stream, const fpos_t *pos);
相關文章
相關標籤/搜索