Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解
上一篇博客我們講解了如何使用Linux提供的文件操作函數,本文主要講解使用C語言提供的文件操作的庫函數。
1.函數介紹
?
|
| ||||||||||||||
| 相關函數 | open,fclose | |||||||||||||
| 表頭文件 | #include<stdio.h> | |||||||||||||
| 定義函數 | FILE * fopen(const char * path,const char * mode); | |||||||||||||
| 函數說明 | 參數path字符串包含欲打開的文件路徑及文件名,參數mode字符串則代表著流形態。 | |||||||||||||
| 返回值 | 文件順利打開后,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,并把錯誤代碼存在errno 中。 | |||||||||||||
| 附加說明 | 一般而言,開文件后會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()后請作錯誤判斷及處理。 | |||||||||||||
| 范例 | #include<stdio.h> | |||||||||||||
|
| ||||||||||||||
| 相關函數 | open,fread,fscanf,getc | |||||||||||||
| 表頭文件 | include<stdio.h> | |||||||||||||
| 定義函數 | nt fgetc(FILE * stream); | |||||||||||||
| 函數說明 | fgetc()從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF。 | |||||||||||||
| 返回值 | getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。 | |||||||||||||
| 范例 | #include<stdio.h>
| |||||||||||||
| fflush(更新緩沖區) | ||||||||||||||
| 相關函數 | write,fopen,fclose,setbuf | |||||||||||||
| 表頭文件 | #include<stdio.h> | |||||||||||||
| 定義函數 | int fflush(FILE* stream); | |||||||||||||
| 函數說明 | fflush()會強迫將緩沖區內的數據寫回參數stream指定的文件中。如果參數stream為NULL,fflush()會將所有打開的文件數據更新。 | |||||||||||||
| 返回值 | 成功返回0,失敗返回EOF,錯誤代碼存于errno中。 | |||||||||||||
| 錯誤代碼 | EBADF 參數stream 指定的文件未被打開,或打開狀態為只讀。其它錯誤代碼參考write()。 | |||||||||||||
|
| ||||||||||||||
| 相關函數 | fopen,fgetc,fgets,fread | |||||||||||||
| 表頭文件 | #include<stdio.h> | |||||||||||||
| 定義函數 | int feof(FILE * stream); | |||||||||||||
| 函數說明 | feof()用來偵測是否讀取到了文件尾,尾數stream為fopen()所返回之文件指針。如果已到文件尾則返回非零值,其他情況返回0。 | |||||||||||||
| 返回值 | 返回非零值代表已到達文件尾。 | |||||||||||||
|
| ||||||||||||||
| 相關函數 | close,fflush,fopen,setbuf | |||||||||||||
| 表頭文件 | #include<stdio.h> | |||||||||||||
| 定義函數 | int fclose(FILE * stream); | |||||||||||||
| 函數說明 | fclose()用來關閉先前fopen()打開的文件。此動作會讓緩沖區內的數據寫入文件中,并釋放系統所提供的文件資源。 | |||||||||||||
| 返回值 | 若關文件動作成功則返回0,有錯誤發生時則返回EOF并把錯誤代碼存到errno。 | |||||||||||||
| 錯誤代碼 | EBADF表示參數stream非已打開的文件。 | |||||||||||||
| 范例 | 請參考fopen()。 |
?
小試牛刀
我們先來看看我們上邊講了哪幾個函數
fopen 打開文件函數
fgetc() fputc() 從文件讀取或者往文件里寫入一個字符
feof()? 判斷當前文件指針是否已經到文件末尾
fflush() 刷新文件緩沖區到文件中
fclose() 關閉文件(附帶一個刷新文件緩沖區內容的操作)
?
流程設計:
首先輸入一個數字代表創建的文件的行數n
然后輸入文件的名字代表創建文件的名字name
然后我們打開文件 open()
輸入n行的內容直到n行輸入完畢
將文件緩沖區刷新
關閉文件
再次打開文件
統計輸入文本中有字符‘a’的個數并輸出出來
關閉文件
?
Demo實現
#include <stdio.h>int main(void){//首先輸入一個數字代表創建的文件的行數nint n;char c;int iCount = 0;//然后輸入文件的名字代表創建文件的名字namechar filename[128];printf("請輸入文件的行數:n\n");scanf("%d",&n);printf("請輸入文件的名稱:filename\n");scanf("%s",filename);getchar();// FILE *fopen(const char*path, const char *mode);//然后我們打開文件 open()FILE* file =fopen(filename,"wb+");printf("文件打開成功\n");//輸入n行的內容直到n行輸入完畢while(n--){ // int fputc(int c, FILE *stream);do{c = getchar();}while(fputc(c,file) !='\n');}//將文件緩沖區刷新fflush(file);//關閉文件fclose(file);printf("關閉文件\n");//再次打開文件file =fopen(filename,"rb");//統計輸入文本中有字符‘a’的個數并輸出出來while(!feof(file)){if(fgetc(file) == 'a')++iCount;}fclose(file);printf("關閉文件\n");printf("共有%d個a\n",iCount);return 0;}
?
平臺效果
?? 在RHEL7上
在MAC上
在Solaris上
轉載于:https://www.cnblogs.com/new0801/p/6177014.html
總結
以上是生活随笔為你收集整理的Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不可恢复的生成错误
- 下一篇: Linux-进程、进程组、作业、会话、控