高級編程之文件I/O(一)

Linux操作系統當中IO都是對文件的操作


 1.標準IO 
  一般都是對普通文件操作
  是一種有緩存的IO
 2.文件IO
  一般都是對設備文件操作
  是一種沒有緩存的IO

標準IO:
 stdio.h
 Dennis Ritchie

 printf scanf getchar putchar gets puts
 getc putc fgets fputs fread fwrite ftell
 rewind fseek

 緩存的分類:
  1.全緩存:緩存區滿刷新緩存區 4096
   對普通文件進行標準IO操作,建立
   的緩存一般爲全緩存
   刷新條件:
    1.緩存區滿刷新
    2.程序結束刷新
    3.fflush來刷新

  2.行緩存:緩存區滿或者遇到\n刷新 1024
    行緩存多是關於終端的一些操作
    1.遇到\n刷新
    2.緩存區滿刷新
    3.程序結束刷新
    4.fflush刷新

  3.不緩存:不對數據緩存直接刷新
    界面交互 出錯處理

流:
 數據從文件當中流入和流出所體現出來的字節
 流叫做流

 流的分類:
  二進制流: 2001
   二進制數據的流
  文本流:
   ASCII碼數據的流
 
 函數原型:
  1.FILE *fopen(const char *path, const char *mode);
  功能:打開文件獲得一個文件流指針
  參數:
   path:要打開文件的路徑
   mode:
    r 只讀 
    文件存在則只讀打開 不存在則報錯
    r+ 讀寫
    文件存在則讀寫打開 不存在則報錯
    w 只寫
    文件不存在則創建 存在則清0
    w+ 寫讀
    文件不存在則創建 存在則清0
    a 追加
    文件不存在則創建 存在則追加打開
    a+ 追加可寫
    文件不存在則創建 存在則追加打開
  返回值:成功返回文件流指針
      失敗返回NULL
  
  2.fputc(int c, FILE *stream);
  功能:向流中寫入一個字符
  參數:
   c:要寫入的字符
   stream:文件流指針
  返回值:
   成功返回輸入字符的ASCII碼
   失敗返回EOF

  3.int fgetc(FILE *stream);
  功能:
   從流中讀取一個字符
  參數:
   stream:文件流指針
  返回值:
   成功讀到字符的ASCII碼
   失敗或者讀到文件的結尾返回EOF
  
  4.char *fgets(char *s, int size, FILE *stream);
  功能:從流中讀到一行數據
  參數:
   s:存儲數據空間的首地址
   size:從流中讀取數據的大小
   stream:文件流指針
  返回值:
   成功返回數據空間的首地址
   出錯或者讀到文件結尾返回NULL
  
  gets和fgets的區別:
   1.gets是危險的,因爲沒有規範讀
     到數據的上限
   2.gets會去掉從終端讀入的\n字符
   3.fgets會讀到n個數據,如果n個
     數據中存在\n字符則立即停止當
     前的讀取操作
   4.fgets不會去掉從流中讀到的\n字
   符
   5.fgets(buff, 32, stdin);
     gets(buff);
  
  5.int fputs(const char *s, FILE *stream);
  功能:
   將s指向的字符串輸入到流中
  參數:
   s:字符串的首地址
   stream:文件流指針
  返回值:
   成功返回非負數
   失敗返回EOF
 
  6.size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
  功能:
   向流中寫入nmemb個對象,每個對象
   都是由ptr指向的size個大小的數據
  參數:
   ptr:操作數據對象的首地址
   size:數據對象的大小
   nmemb:數據對象的個數
   strem:文件流指針
  返回值:
   成功返回實際寫入對象的個數
   失敗返回很小的數0

  7. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  功能:
   從流中讀取n個對象,每個對象size個大小
   存放在ptr指向的空間中
  參數:
   ptr:要存放數據空間的首地址
   size:數據的大小
   nmemeb:數據的個數
   stream:文件流指針
  返回值:
   成功返回實際讀到的對象個數
   失敗返回0
 
  8.int fseek(FILE *stream, long offset, int whence);
  功能:
   定位文件光標的位置
  參數:
   stream:文件流指針
   offset:偏移量
   whence:
    SEEK_SET
    SEEK_CUR
    SEKK_END
  返回值:
   成功返回0
   失敗返回-1

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章