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