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