您好,登錄后才能下訂單哦!
一.fopen函數(shù):
函數(shù)原型:FILE* fopen(const char * path, const char* mode)
path參數(shù) :表示一個文件名,可以包含路徑和文件名。如:“test.txt” 或"C:\\homework\\test.txt" 注意有兩個\\,因為其中一個 ’\‘ 代表轉(zhuǎn)義字符。
mode參數(shù): man fopen文本中的內(nèi)容:
r Open text file for reading. The stream is positioned at the
beginning of the file.
r+ Open for reading and writing. The stream is positioned at the
beginning of the file.
w Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
w+ Open for reading and writing. The file is created if it does
not exist, otherwise it is truncated. The stream is positioned
at the beginning of the file.
a Open for appending (writing at end of file). The file is cre‐
ated if it does not exist. The stream is positioned at the end
of the file.
a+ Open for reading and appending (writing at end of file). The
file is created if it does not exist. The initial file position
for reading is at the beginning of the file, but output is
always appended to the end of the file.
注意:后三個為The file is created if it does not exist, otherwise it is truncated
對文件的使用方式有如下6種:
文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是: r(read): 讀 w(write): 寫 a(append): 追加 t(text): 文本文件,可省略不寫 b(banary): 二進(jìn)制文件 +: 讀和寫
返回值:如果成功,則返回一個文件指針,如果失敗,則返回NULL。
二.fread函數(shù):size_t fread(void* buf, size_t size, size_t nmemb, FILE* stream)
fwrite函數(shù):size_t fwrite(const void* buf, size_t size, size_t nmemb, FILE* stream)
buf參數(shù):數(shù)據(jù)緩沖的地址,注意為void類型。
size參數(shù): 因為buf為void類型,所以要指明每個數(shù)據(jù)項的大小。注意兩個函數(shù)都是以數(shù)據(jù)項來讀寫的,一次讀或?qū)懸粋€數(shù)據(jù)項,而不是字節(jié)。數(shù)據(jù)項可以是char,int,結(jié)構(gòu)體等等。
nmemb參數(shù):為希望讀/寫的數(shù)據(jù)項個數(shù)。注意,實際讀/寫操作不一定會讀/寫count各數(shù)據(jù)項。
stream參數(shù):一個文件指針。
返回值:man fread文本內(nèi)容如下:
RETURN VALUE
On success, fread() and fwrite() return the number of items read or
written. This number equals the number of bytes transferred only when
size is 1. If an error occurs, or the end of the file is reached, the
return value is a short item count (or zero).
fread() does not distinguish between end-of-file and error, and callers
must use feof(3) and ferror(3) to determine which occurred.
文本總結(jié):返回值都是實際讀/寫操作的數(shù)據(jù)項數(shù),發(fā)生錯誤或者讀到文件末尾并不是返回-1,也是一個讀/寫的數(shù)據(jù)項數(shù)或者0。如果要判斷是發(fā)生錯誤還是到文件結(jié)尾,可以調(diào)用feof(3)和ferror(3)。
三.fclose函數(shù):int fclose(FILE* fp)
關(guān)閉一個文件
返回值:返回值 若關(guān)文件動作成功則返回0,有錯誤發(fā)生時則返回EOF并把錯誤代碼存到errno。
相關(guān)代碼:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<string.h>
const int BUF_SIZE = 1024;
int main()
{
FILE* stream;
FILE* wstream;
char buf[BUF_SIZE];
stream = popen("ls -l","r");
wstream = fopen("test_popen.txt","w+");
memset(buf, '\0', sizeof(buf));
fread(buf, sizeof(char), sizeof(buf), stream);//把返回標(biāo)準(zhǔn)I/O流內(nèi)的內(nèi)容讀到buf中
fwrite(buf,sizeof(char), strlen(buf), wstream);
fclose(wstream);//一定要記得關(guān)閉
pclose(stream);//只能用pclose不能用fclose
return 0;
}
四.fgets函數(shù):char* fgets(char* buf, size_t size, FILE* stream) ('\n' , '\0')
功能:從文件中讀取一行,送到buf中。
fgets參數(shù):,參數(shù)s是緩沖區(qū)的首地址,size是緩沖區(qū)的長度,該函數(shù)從stream所指的文件中讀取以'\n'結(jié)尾的一行(包括'\n'在內(nèi))存到緩沖區(qū)s中,并且在該行末尾添加一個'\0'組成完整的字符串
返回值: 如果成功,buf指向哪返回值就指向哪,出差或讀到文件尾時返回NULL。
注意:1.因為該函數(shù)會在行末尾加 ‘\0’ ,所以它最多只能讀size-1個字符。
2.因為該函數(shù)是讀取一行,它的返回條件是讀到 ‘\n’ ,它看待 '\0 '是一個普通的字符。
3.它不能讀二進(jìn)制文件。
五.fputs函數(shù): int fputs(const char * buf, FILE* stream) (沒有'\0')
功能:把buf中保存的字符串寫到文件中。
返回值:成功返回讀入字符串?dāng)?shù),出差返回EOF
注意:緩沖區(qū)s中保存的是以'\0'結(jié)尾的字符串,fputs將該字符串寫入文件 stream,但并不寫入結(jié)尾的'\0'。與fgets不同的是,fputs并不關(guān)心的字符串中的'\n'字符,
相關(guān)代碼:
1 #include<stdio.h> 2 3 int main() 4 { 5 char *buf = "i want to have a star\n"; 6 FILE* fp = fopen("./test.txt","w+"); 7 fputs(buf,fp); 8 return 0; 9 }
六.fprintf函數(shù):int fprintf(FILE* stream ,const char *format, . . .)
功能:傳送格式化輸出到一個文件
format 格式化輸入函數(shù),和printf里的格式一樣
返回值:成功時返回轉(zhuǎn)換的字節(jié)數(shù),失敗時返回一個負(fù)數(shù)
fp = fopen("./test.c","w+");
fprintf(fp,"%s\n",str);
七.fscnaf函數(shù): int fscanf(FILE* stream, const char* format, . . .)
功能:從一個流中執(zhí)行格式化輸入
format 格式化輸出函數(shù),和scanf里的格式一樣
返回值:成功時返回轉(zhuǎn)換的字節(jié)數(shù),失敗時返回一個負(fù)數(shù)
fp = fopen("/local/test.c","a+");
fscanf(fp,"%s",str);
八.fgetc函數(shù):int fgetc(FILE* stream)
函數(shù)說明: fgetc()從參數(shù)stream所指的文件中讀取一個字符。若讀到文件尾而無數(shù)據(jù)時便返回EOF。
返回值: getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。
#include<stdio.h> main() { FILE *fp; int c; fp=fopen(“./test.txt”,”w+”); while((c=fgetc(fp))!=EOF) printf(“%c”,c); fclose(fp); }
九.fputc函數(shù):int fputc(int c, FILE* stream)
函數(shù)說明 :fputc 會將參數(shù)c 轉(zhuǎn)為unsigned char 后寫入?yún)?shù)stream 指定的文件中。
返回值 :fputc()會返回寫入成功的字符,即參數(shù)c。若返回EOF則代表寫入失敗。
#include<stdio.h> main() { FILE * fp; char a[26]=”abcdefghijklmnopqrstuvwxyz”; int i; fp= fopen(“./test.txt”,”w”); for(i=0;i<26;i++) fputc(a,fp); fclose(fp); }
十.flush函數(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中。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。