C語言利用fgetc和fputc函式實現檔案的複製

2021-10-02 12:06:50 字數 3269 閱讀 4031

分析:使用指定函式實現指定功能。所以這裡問題就簡單化,我們弄明白fgetc和fputc兩個函式如何使用即可。

函式原型

函式介紹

int fgetc(file *stream)從指定的流 stream 獲取下乙個字元(乙個無符號字元),並把位置識別符號往前移動。

函式成功讀取時返回讀取的字元,若到檔案末尾或者出錯時返回eof

int fputc(int char, file *stream)把引數char指定的字元(乙個無符號字元)寫入到指定的流 stream 中,並把位置識別符號往前移動。

函式成功寫入資料時,返回寫入的字元,出錯時返回eof

這裡面的流就是資料的意思,我們需要注意的是,對流進行操作,也就是對檔案進行操作時,需要先開啟檔案,執行完程式後,還需要及時關閉檔案,以免發生不可避免的錯誤。這裡還有乙個特別的地方,就是對乙個檔案進行度操作或者寫操作的時候,檔案指標會自動移位,若是想回到檔案頭需要我們自己處理。

這裡引入了乙個新的問題,開啟和關閉檔案,這裡我們需要使用到fopen和fclose函式。

fopen函式:

函式原型

函式介紹

file *fopen(const char *filename, const char *mode)使用給定的模式mode開啟filename所指向的檔案。

filename:指定開啟的檔案

mode:開啟檔案的方式

成功開啟時返回流指標,出錯時返回null

mode引數具體介紹:

" r "

以唯讀的方式開啟檔案,檔案必須存在

" r+ "

以讀寫的方式開啟檔案,檔案必須存在

" w "

以只寫的方式開啟檔案,若檔案存在則檔案長度清除。若檔案不存在則建立

" w+ "

以讀寫方式開啟檔案,其他等同「 w 」

" a "

以只寫方式開啟檔案,若檔案不存在則建立,向檔案寫入資料時是追加到檔案末尾

" a+ "

以讀寫方式開啟檔案,其他等同「 a 」

fclose函式:

函式原型

函式介紹

int fclose(file *stream)關閉流 stream。重新整理所有的緩衝區。

如果流關閉成功返回0,若失敗返回eof

實現**如下:

#include #include int main(int argc, const char *ar**)

fclose(fpin);

fclose(fpout);

return 0;

}

**測試:

linux@linux:~/review_linux$ gcc -c test.c -wall

linux@linux:~/review_linux$ ./a.out file1.txt file2.txt

下面兩圖可見,file2.txt成功建立,並且其內容與file1.txt一致,要求功能實現成功。

這裡我們是使用fgetc和fputc函式每次讀取/寫入乙個資料來實現檔案的複製。

我們還可以使用fgets和fputs函式,每次讀取/寫入一行來實現檔案的複製。

函式原型

函式介紹

char *fgets(char *str, int n, file *stream)從指定的流 stream 讀取一行,並把它儲存在str所指向的字串內。當讀取(n-1)個字元時,或者讀取到換行符時,或者到達檔案末尾時,它會停止,具體視情況而定。

str:指向乙個字元陣列的指標,該陣列儲存了要讀取的字串

n:要讀取的最大字元數(包括最後的空字元),通常是使用以 str 傳遞的陣列長度

stream指向 file 物件的指標,該 file 物件標識了要從中讀取字元的流

函式成功讀取返回str,若到了檔案末尾或是出錯時返回null

int fputs(const char *str, file *stream)把字串寫入到指定的流 stream 中,但不包括空字元。

str:指向乙個字元陣列的指標,該陣列儲存著要寫入的字串

stream:指向 file 物件的指標,該 file 物件標識了要被寫入字串的流。

函式成功寫入時返回寫入字元個數,失敗返回eof

再或者我們還可以使用fread和fwrite函式,每次讀取/寫入指定長度資料,實現檔案複製。

函式原型

函式介紹

size_t fread(void *ptr, size_t size, size_t nmemb, file *stream)從給定流stream讀取資料到ptr所指向的陣列中。

ptr:指向乙個字元陣列的指標,該陣列儲存了要讀取的字串

size:讀取元素的大小,按位元組為單位

nmemb:讀取元素的個數,元素的長度為size位元組

stream:指向 file 物件的指標,該 file 物件指定了乙個輸入流

函式成功讀取返回讀取個數,失敗則返回eof

size_t fread(void *ptr, size_t size, size_t nmemb, file *stream)從給定流stream讀取資料到ptr所指向的陣列中。

ptr:指向乙個字元陣列的指標,該陣列儲存了要寫入的字串

size:寫入元素的大小,按位元組為單位

nmemb:寫入元素的個數,元素的長度為size位元組

stream:指向 file 物件的指標,該 file 物件指定了乙個輸出流

函式成功寫入返回寫入個數,失敗則返回eof

倉促成文,不當之處,尚祈方家和讀者批評指正。聯絡郵箱[email protected]

C語言fgetc和fputc函式用法詳解

以字元形式讀寫檔案時,每次可以從檔案中讀取乙個字元,或者向檔案中寫入乙個字元。主要使用兩個函式,分別是 fgetc 和 fputc fgetc 是 file get char 的縮寫,意思是從指定的檔案中讀取乙個字元。fgetc 的用法為 int fgetc file fp fp 為檔案指標。fge...

Linux下C語言的fgets與fputs

使用的是centosgcc編譯下面程式 顯示 warning the gets function is dangerous and should not be used.問題出在程式中使用了getslinux 下gcc編譯器不支援這個函式,解決辦法是使用fgets fgets 函式的基本用法為 fg...

C語言fgetc 函式的返回值

c語言fgetc 函式的返回值 本文 學習c語言的,檔案操作,大都會用到它。它的函式原型 int fgetc file stream 這個函式的返回值,是返回讀取的乙個位元組。如果讀到檔案末尾返回eof。eof其實就是乙個巨集 define eof 1 表示 1.既然返回的是乙個位元組,為什麼返回值...