日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

發布時間:2025/5/22 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



上一篇博客我們講解了如何使用Linux提供的文件操作函數,本文主要講解使用C語言提供的文件操作的庫函數。

1.函數介紹

?


fopen
(打開文件)

相關函數

openfclose

表頭文件

#include<stdio.h>

定義函數

FILE * fopen(const char * path,const char * mode);

函數說明

參數path字符串包含欲打開的文件路徑及文件名,參數mode字符串則代表著流形態。
mode
有下列幾種形態字符串:
r
打開只讀文件,該文件必須存在。

r+
打開可讀寫的文件,該文件必須存在。
w
打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a+
以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留。
上述的形態字符串都可以再加一個b字符,如rbw+bab+等組合,加入b 字符用來告訴函數庫打開的文件為二進制文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字符。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此文件權限也會參考umask值。

返回值

文件順利打開后,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,并把錯誤代碼存在errno 中。

附加說明

一般而言,開文件后會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()后請作錯誤判斷及處理。

范例

#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“noexist”,”a+”);
if(fp= =NULL) return;
fclose(fp);
}


fgetc
(由文件中讀取一個字符)

相關函數

openfreadfscanfgetc

表頭文件

include<stdio.h>

定義函數

nt fgetc(FILE * stream);

函數說明

fgetc()從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF

返回值

getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。

范例

#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“exist”,”r”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}

fputc(將一指定字符寫入文件流中)

相關函數

fopenfwritefscanfputc

表頭文件

#include<stdio.h>

定義函數

int fputc(int c,FILE * stream);

函數說明

fputc 會將參數c 轉為unsigned char 后寫入參數stream 指定的文件中。

返回值

fputc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。

范例

#include<stdio.h>
main()
{
FILE * fp;
char a[26]=”abcdefghijklmnopqrstuvwxyz”;
int i;
fp= fopen(“noexist”,”w”);
for(i=0;i<26;i++)
fputc(a[i],fp);
fclose(fp);
}

fflush(更新緩沖區)

相關函數

writefopenfclosesetbuf

表頭文件

#include<stdio.h>

定義函數

int fflush(FILE* stream);

函數說明

fflush()會強迫將緩沖區內的數據寫回參數stream指定的文件中。如果參數streamNULLfflush()會將所有打開的文件數據更新。

返回值

成功返回0,失敗返回EOF,錯誤代碼存于errno中。

錯誤代碼

EBADF 參數stream 指定的文件未被打開,或打開狀態為只讀。其它錯誤代碼參考write()。


feof
(檢查文件流是否讀到了文件尾)

相關函數

fopenfgetcfgetsfread

表頭文件

#include<stdio.h>

定義函數

int feof(FILE * stream);

函數說明

feof()用來偵測是否讀取到了文件尾,尾數streamfopen()所返回之文件指針。如果已到文件尾則返回非零值,其他情況返回0

返回值

返回非零值代表已到達文件尾。


fclose
(關閉文件)

相關函數

closefflushfopensetbuf

表頭文件

#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语言库函数的文件操作详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。