写文件函数 Linux C fwrite,C文件读写函数介绍(转)
1.fopen()
fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen實現三個功能:為使用而打開一個流,把一個文件和此流相連接,給此流返回一個FILR指針。
參數filename指向要打開的文件名,mode表示打開狀態的字符串,其取值如下:
字符串 含義
"r" 以只讀方式打開文件
"w" 以只寫方式打開文件
"a" 以追加方式打開文件
"r+" 以讀/寫方式打開文件,如無文件出錯
"w+" 以讀/寫方式打開文件,如無文件生成新文件
一個文件可以以文本模式或二進制模式打開,這兩種的區別是:在文本模式中回車被當成一個字符’/n’,而二進制模式認為它是兩個字符0x0D,0x0A;如果在文件中讀到0x1B,文本模式會認為這是文件結束符,也就是二進制模型不會對文件進行處理,而文本方式會按一定的方式對數據作相應的轉換。
系統默認的是以文本模式打開,可以修改全部變量_fmode的值來修改這個設置,例如_fmode=O_TEXT;就設置默認打開方式為文本模式;而_fmode=O_BINARY;則設置默認打開方式是二進制模式。
我們也可以在模式字符串中指定打開的模式,如"rb"表示以二進制模式打開只讀文件,"w+t"或"wt+"表示以文本模式打開讀/寫文件。
此函數返回一個FILE指針,所以申明一個FILE指針后不用初始化,而是用fopen()來返回一個指針并與一個特定的文件相連,如果成敗,返回NULL.
例:
以下是引用片段:
FILE *fp;
if(fp=fopen("123.456","wb"))
puts("打開文件成功");
else
puts("打開文件成敗");
2.fclose()
fclose()的功能就是關閉用fopen()打開的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失敗返回EOF。
在程序結束時一定要記得關閉打開的文件,不然可能會造成數據丟失的情況,我以前就經常犯這樣的錯誤。
例:fclose(fp);
3.fputc()
向流寫一個字符,原型是int fputc(int?c, FILE *stream); 成功返回這個字符,失敗返回EOF。
例:fputc(’X’,fp);
4.fgetc() 從流中讀一個字符,原型是int fputc(FILE *stream); 成功返回這個字符,失敗返回EOF。
例:char ch1=fgetc(fp);
5. fseek()
此函數一般用于二進制模式打開的文件中,功能是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);如果成功返回0,參數offset是移動的字符數,whence是移動的基準,取值是:
符號常量 值 基準位置
SEEK_SET 0 文件開頭
SEEK_CUR 1 當前讀寫的位置
SEEK_END 2 文件尾部
例:fseek(fp,1234L,SEEK_CUR);//把讀寫位置從當前位置向后移動1234字節(L后綴表示長整數)
fseek(fp,0L,2);//把讀寫位置移動到文件尾
6.fputs()
寫一個字符串到流中,原型int fputs(const char *s, FILE *stream);
例:fputs("I Love You",fp);
7.fgets()
從流中讀一行或指定個字符,原型是char *fgets(char *s, int n, FILE *stream); 從流中讀取n-1個字符,除非讀完一行,參數s是來接收字符串,如果成功則返回s的指針,否則返回NULL。
例:如果一個文件的當前位置的文本如下:
Love ,I Have
But ……..
如果用
fgets(str1,4,file1);
則執行后str1="Lov",讀取了4-1=3個字符,而如果用
fgets(str1,23,file1);
則執行str="Love ,I Have",讀取了一行(不包括行尾的’/n’)。
8.fprintf()
按格式輸入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, …]);其用法和printf()相同,不過不是寫到控制臺,而是寫到流罷了。
例:fprintf(fp,"%2d%s",4,"Hahaha");
9.fscanf()
從流中按格式讀取,其原型是int fscanf(FILE *stream, const char *format[, address, …]);其用法和scanf()相同,不過不是從控制臺讀取,而是從流讀取罷了。
例:fscanf(fp,"%d%d" ,&x,&y);
10.feof()
檢測是否已到文件尾,是返回真,否則返回0,其原型是int feof(FILE *stream);
例:if(feof(fp))printf("已到文件尾");
11.ferror()
原型是int ferror(FILE *stream);返回流最近的錯誤代碼,可用clearerr()來清除它,clearerr()的原型是void clearerr(FILE *stream);
例:printf("%d",ferror(fp));
12.rewind()
把當前的讀寫位置回到文件開始,原型是void rewind(FILE *stream);其實本函數相當于fseek(fp,0L,SEEK_SET);
例:rewind(fp);
13.remove()
刪除文件,原型是int remove(const char *filename); 參數就是要刪除的文件名,成功返回0。
例:remove("c://io.sys");
14.fread()
從流中讀指定個數的字符,原型是size_t fread(void *ptr, size_t size, size_t n, FILE *stream);參數ptr是保存讀取的數據,void*的指針可用任何類型的指針來替換,如char*、int *等等來替換;size是每塊的字節數;n是讀取的塊數,如果成功,返回實際讀取的塊數(不是字節數),本函數一般用于二進制模式打開的文件中。
例:
以下是引用片段:
char x[4230];
FILE *file1=fopen("c://msdos.sys","r");
fread(x,200,12 ,file1);//共讀取200*12=2400個字節
15.fwrite()
與fread對應,向流中寫指定的數據,原型是size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);參數ptr是要寫入的數據指針,void*的指針可用任何類型的指針來替換,如char*、int *等等來替換;size是每塊的字節數;n是要寫的塊數,如果成功,返回實際寫入的塊數(不是字節數),本函數一般用于二進制模式打開的文件中。
例:
以下是引用片段:
char x[]="I Love You";
fwire(x, 6,12,fp);//寫入6*12=72字節
將把"I Love"寫到流fp中12次,共72字節
16.tmpfile()
其原型是FILE *tmpfile(void); 生成一個臨時文件,以"w+b"的模式打開,并返回這個臨時流的指針,如果失敗返回NULL。在程序結束時,這個文件會被自動刪除。
例:FILE *fp=tmpfile();
17.tmpnam();
其原型為char *tmpnam(char *s); 生成一個唯一的文件名,其實tmpfile()就調用了此函數,參數s用來保存得到的文件名,并返回這個指針,如果失敗,返回NULL。
例:tmpnam(str1);
1.????首先要理解幾個概念:
文件:?按一定規則存儲在磁盤上的數據集合。
文件名:?能唯一標識某個磁盤文件的字符串。形式:?盤符:/?路徑?/?文件名.擴展名
文本文件::?數據以其數字字符的ASCII碼形式、一個字節一個字節地存儲在磁盤上。
二進制文件:數據以二進制形式在存儲在磁盤上。
設備文件:輸入/輸出設備
標準輸入文件:鍵盤
標準輸出文件/標準錯誤輸出文件:顯示器
文件型指針:C語言是通過名為FILE的結構型指針來管理文件讀寫的。FILE?*
文件的打開和關閉?:文件操作先建立文件與文件指針之間的關系,接著進行文件的讀與寫。建立文件與文件指針之間的聯系的過程是文件的打開。終止這種聯系就是文件的關閉。
FILE結構:定義在〈stdio.h〉中。形式如下:
typedef?struct
{
int??_fd;???/*文件代號*/
int??_cleft;???????/*?文件緩沖區所剩字節數*/
int??_mode;????/*?文件使用模式*/
char??*nextc;?????/*?下一個等待處理的字節地址,?即文件內部指針*/
char??*buff;????/*??文件緩沖區首地址??*/
}FILE;
2.?主要操作函數用相應的使用
1)?文件的打開與關閉:
#include?FILE?*fp;
fp?=?fopen(char*?filename,??char*??made);
if(fp?==?NULL)
{
exit(0);
}
fclose(fp)
mode和種類有:
r?:?打開一個文本文件,供讀取數據,?文件不存在,則返回NULL
w?:?建立一個供寫入的文本文件.?廢棄原有內容
a:?打開或建立一個把數據追加到文件尾的文本文件
r+:?更新數據
w+?:?更新數據,廢棄原有內容
a+?:?更新數據,?寫入的數據追加到文件尾.
二進制在后面加"b"
標準輸入/輸出文件的文件型指針:??stdin,?stdout,?stderr
2)???文件的讀與寫:
把一個字符寫入文件,?或從文件中讀取一個字符:??文件內部指針自動移向下一位可讀寫的位置
int?fputc(char?ch,?FILE?*fp);
int?fgetc(?FILE?*fp)
把一行數據寫入文件,?或讀取一行數據:
char?*?fputs(char?*str,?FILE?*fp)
char?*?fgets(char?*str,?int?n,?FILE?*fp)?;?//?讀取N-1?個字符,第N個字符補'/0'
把指定字節數的若干數據寫入文件,?或讀出文件.
int?fwrite(char?*?buf,?unsigned?size,?unsigned?n,?FILE?*fp);?size?每個數據的字節數,??n?個數據.
int?fread(char?*buf,?unsigned?size,?unsigned?n,?FILE?*fp);
把指定格式的數據寫入文件,?或讀取指定格式的數據
int?fprintf(FILE?*fp,?char?*format,?e1,e2,......en);
int?fscanf(FILE?*fp,?char?*format,?e1,e2,......en);
3)?文件位置的確定與指針管理.
文件尾的測試:??int?feof(FILE?*fp);?//當前已到達文件尾返回非0,?否則返回0
不同的計算機系統以不同的鍵盤組合鍵形成文件的結束符.?IBM?PC及其兼容機是+?z
把文件內部指針重新定位到文件的起始位置?????int?rewind(FILE?*fp);
把文件內部指針定位到指定的位置:???int?fseek(FILE?*fp,?long?offset,?int?from);
from?是定位的起始點.
SEEK_SET????0????從文件頭開始
SEEK_CUR????1????從文件內部指針當前位置開始
SEEK_END????2???從文件尾開始
offset?是以From?為起始點的依稀字節數,大于0表示向文件尾方向,?0?不移動,
文件操作出錯測式???int?ferror(FILE?*fp);
用于對由FP指向的文件最近一次操作進行正確性測試.?出錯返回非0,還沒返回0
4)??文件的刪除
int?remove(char?*?filename);
3.??一些以前我沒想到的知識點.
char?ch;
ch?=?getchar?()??功能等價于?ch?=?fgetc(stdin)??功能等價于?scanf("%c",ch)???功能等價于?fscanf(stdin,?"%c",ch)
putchar(ch)??功能等價于?printf("%c",ch)???功能等價于?fputc(stdout)???功能等價于?fprintf(stdout,?"%c",?ch)
總結
以上是生活随笔為你收集整理的写文件函数 Linux C fwrite,C文件读写函数介绍(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 索引代码的函数定义,Linu
- 下一篇: linux远程执行本地脚本,ssh远程执