文件I/O編程之: 標準I/O編程
2.關(guān)閉文件
(1)函數說(shuō)明。
關(guān)閉標準流文件的函數為fclose(),該函數將緩沖區內的數據全部寫(xiě)入到文件中,并釋放系統所提供的文件資源。
(2)函數格式說(shuō)明。
fclose()函數格式如表6.18所示。
表6.18 fclose()函數語(yǔ)法要點(diǎn)
所需頭文件 | #includestdio.h> |
函數原型 | intfclose(FILE*stream) |
函數傳入值 | stream:已打開(kāi)的文件指針 |
函數返回值 | 成功:0 |
3.讀文件
(1)fread()函數說(shuō)明。
在文件流被打開(kāi)之后,可對文件流進(jìn)行讀寫(xiě)等操作,其中讀操作的函數為fread()。
(2)fread()函數格式。
fread()函數格式如表6.19所示。
表6.19 fread()函數語(yǔ)法要點(diǎn)
所需頭文件 | #includestdio.h> |
函數原型 | size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream) |
函數傳入值 | ptr:存放讀入記錄的緩沖區 |
size:讀取的記錄大小 | |
nmemb:讀取的記錄數 | |
stream:要讀取的文件流 | |
函數返回值 | 成功:返回實(shí)際讀取到的nmemb數目 |
4.寫(xiě)文件
(1)fwrite()函數說(shuō)明。
fwrite()函數用于對指定的文件流進(jìn)行寫(xiě)操作。
(2)fwrite()函數格式。
fwrite()函數格式如表6.20所示。
表6.20 fwrite()函數語(yǔ)法要點(diǎn)
所需頭文件 | #includestdio.h> |
函數原型 | size_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,FILE*stream) |
續表
函數傳入值 | ptr:存放寫(xiě)入記錄的緩沖區 |
size:寫(xiě)入的記錄大小 | |
nmemb:寫(xiě)入的記錄數 | |
stream:要寫(xiě)入的文件流 | |
函數返回值 | 成功:返回實(shí)際寫(xiě)入的記錄數目 |
5.使用實(shí)例
下面實(shí)例的功能跟底層I/O操作的實(shí)例基本相同,運行結果也相同(請參考6.3.1節的實(shí)例),只是用標準I/O庫的文件操作來(lái)替代原先的底層文件系統調用而已。
讀者可以觀(guān)察哪種方法的效率更高,其原因又是什么。
#includestdlib.h>
#includestdio.h>
#defineBUFFER_SIZE1024/*每次讀寫(xiě)緩存大小*/
#defineSRC_FILE_NAMEsrc_file/*源文件名*/
#defineDEST_FILE_NAMEdest_file/*目標文件名文件名*/
#defineOFFSET10240/*復制的數據大小*/
intmain()
{
FILE*src_file,*dest_file;
unsignedcharbuff[BUFFER_SIZE];
intreal_read_len;
/*以只讀方式打開(kāi)源文件*/
src_file=fopen(SRC_FILE_NAME,r);
/*以寫(xiě)方式打開(kāi)目標文件,若此文件不存在則創(chuàng )建*/
dest_file=fopen(DEST_FILE_NAME,w);
if(!src_file||!dest_file)
{
printf(Openfileerrorn);
exit(1);
}
/*將源文件的讀寫(xiě)指針移到最后10KB的起始位置*/
fseek(src_file,-OFFSET,SEEK_END);
/*讀取源文件的最后10KB數據并寫(xiě)到目標文件中,每次讀寫(xiě)1KB*/
while((real_read_len=fread(buff,1,sizeof(buff),src_file))>0)
{
fwrite(buff,1,real_read_len,dest_file);
}
fclose(dest_file);
fclose(src_file);
return0;
}
讀者可以嘗試用其他文件打開(kāi)函數進(jìn)行練習。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論