Linux檔案IO(標準I/O<一>)
– 一、標準IO
– 二、流[FILE]
– 三、流的打開與關閉
– 四、讀寫流
↓
一、 標準IO
- 一句話理解:用標準C寫出來的一組具有輸入輸出的API(應用程式編程介面)函式
- 必須要知道的兩個名詞:緩沖機制、系統呼叫,
- 標準IO通過緩沖機制減少系統呼叫的次數從而達到實作更高效率的處理

二、 流[FILE]
-
FILE:標準IO用一個結構體型別來存放打開檔案的相關資訊[一個FILE結構體代表一個打開的檔案]
-
流(stream):FILE又被稱為流
-
一句話理解:標準IO的所有操作都是圍繞FILE來進行
-
流分為二進制流、文本流
- 在Windows下:文本流( 回車換行:\r+\n)和二進制流(\n)有區別
- 在Linux下:文本流(\n)和二進制流(\n)無區別
- 當程式需要移植到Windows下運行時,要考慮用到二者區別,用二進制流 -
流的緩沖型別
- 全緩沖[打開普通檔案時,默認是全緩沖]:當流的緩沖區無資料(寫操作)、無空間(讀操作)時,進行IO操作
- 行緩沖[標準輸入輸出(當流和一個終端關聯)時]:當在輸入和輸出遇到換行符(\n)時,進行IO操作
- 無緩沖[輸出錯誤流資料時]:標準錯誤流輸出時資料,直接寫入檔案,流不進行緩沖 -
標準IO預定義三個流:stdin【標準輸入流】 / stdout 【標準輸出流】/ stderr【標準錯誤流】
三、流的打開與關閉
打開
-
打開一個標準IO流
**FILE *fopen(const char path, const char mode);
成功時回傳流指標,出錯時回傳NULL;- path 是流的路徑
- mode是流的打開方式(r(b)/r+b w(b)/w+b a(b)/a+b)
#include<stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen('demo.txt', "w+")) == NULL) {
perror("fopen error");
return -1;
}
...
return 0;
}
- perror是標準IO處理錯誤資訊的方式之一:先輸出字串s,在輸出錯誤號對應的錯誤資訊
- 如果是上面程式出錯將會輸出:fopen error:No such file or directory
關閉
-
關閉一個標準IO流
*int fclose(FILE stream);
成功回傳0;失敗回傳EOF,并設定errno(errno存放錯誤號)- 流關閉時自動重繪緩沖中的資料并釋放緩沖區
- 流一旦關閉就不能執行任何操作
四、讀寫流
- 流支持不同的讀寫方式:
- 讀寫一個字符:fgetc()/fputc() 一次讀/寫一個字符
- 讀寫一行:fgets()/fputs() 一次讀/寫一行
按字符輸入輸出
- 按字符輸入
- int fgetc(FILE *stream);
- 成功時回傳讀取的字符;若到檔案末尾或者出錯時回傳EOF(-1)
###部分代碼塊
FILE *fp;
int ch, count;
if ((fp = fopen(argv[1], “r”)) == NULL ) {
perror(“fopen”);
return -1;
}
while ((ch = fgetc(fp) != EOF) {
count++;
}
printf(“total bytes %d \n”, count);
- 按字符輸出
- int fputc(int c, FILE *stream);
- 成功時回傳寫入的字符;出錯時回傳EOF(-1)
###部分代碼塊
FILE *fp;
int ch;
if ((fp = fopen(argv[1], “w”)) == NULL) {
perror(“fopen”);
return -1;
}
for (ch = ‘a’; ch <= ‘z’; ch++) {
fputc(ch, fp);
}
按行輸入輸出
- 按行輸入
- char *fgets(char *s, int size, FILE *stream);
- 成功時回傳s,到檔案末尾或者出錯時回傳NULL
- 遇到’\n’或已輸入size-1個字符時回傳,最后總是包含’\0’
###部分代碼塊
#define N 6;
char buf[N]
fgets(buf, N, stdin);
printf(“%s”, buf);
- 假設鍵盤輸入分別是:abcd<回車> abcdef<回車>,buf中的內容是?

- 按行輸出
- int fputs(conts char *s, FILE *stream);
- 成功時回傳輸出的字符個數,出錯時回傳EOF(-1)
###部分代碼塊
FILE *fp;
char buf[] “hello world”;
if((fp = fopen(argv[1], “a”)) == NULL) {
perror(“fopen”);
return -1;
}
fputs(buf, fp);
OK了,迪爾 friends,this 章節 is over,見 you next
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/421418.html
標籤:AI
上一篇:矩量母函式介紹
