輸出——fopen\fclose\fread\fwrite

本節主要討論ANSI C的輸入和輸出(I/O)函數。

打開流:fopen:

原型:FILE fopen(const char path,const char * mode);

返回值:成功,返回文件指針,失敗返回NULL,錯誤碼保存在errno中 .

示例


FILE *fp;
fp = fopen(“/home/tianger/test”,”r”);
if(NULL == fp)
{
perror(“/home/tianger/test”);
}


關閉流:fclose:

原型:int fclose( FILE *fp );

返回值:成功,返回0;失敗,返回EOF(-1)

示例

關閉fopen打開的fp

fclose(fp);
fp = NULL;


讀緩衝區:fread:

作用:fread從一個文件流中讀數據,最多讀取count個元素,每個元素size字節,如果調用成功返回實際讀取到的元素個數,如果不成功或讀到文件末尾返回 0

原型:size_t fread ( void buffer, size_t size, size_t count, FILE stream) ;

參數:

buffer 用於接收數據的內存地址

size 要讀的每個數據項的字節數,單位是字節

count 要讀count個數據項,每個數據項size個字節.

stream 輸入流

返回值

:實際讀取的元素個數。如果返回值與count不相同,則可能文件結尾或發生錯誤。從ferror和feof獲取錯誤信息或檢測是否到達文件結尾。

示例

#include
#include
int main(void)
{
FILE*stream;
char msg[]="this is a test";
char buf[20];
if((stream=fopen("big_cat.txt","w+"))==NULL)
{
fprintf(stderr,"Can not open output file.\n");
return 0;
}
/*write some data to the file*/
fwrite(msg,strlen(msg)+1,1,stream);
/*sizeof(char)=1 seek to the beginning of the file*/
fseek(stream,0,SEEK_SET);
/*read the data and display it*/
fread(buf,strlen(msg)+1,1,stream);
printf("%s\n",buf);
fclose(stream);
return 0;
}

輸出

產生一個big_cat.txt文件,並打印 this is a test.


寫緩衝區: fwrite:

說明:fwrite 指向文件寫入一個數據塊.fwrite只是把程序先寫到緩衝區,真正寫入到文件,由操作系統決定,如果此時你想快速把緩衝區內容寫入到文件,可以調用fflush()來實現。

原型:size_t fwrite(const void buffer, size_t size, size_t count, FILE stream);

返回值:返回實際寫入的數據塊數目

示例:

#include 
int main ()
{
FILE * pFile;
char buffer[] = { 'x' , 'y' , 'z' };
pFile = fopen ( "big_cat.txt" , "wb" );
fwrite (buffer , sizeof(buffer), 1 , pFile );
fclose (pFile);
return 0;
}

輸出:

往文件big_cat.txt中寫入xyz

「C與指針心得」26. I/O輸入/輸出——fopen\fclose\fread\fwrite


分享到:


相關文章: