日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput

發(fā)布時間:2024/8/23 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

標(biāo)準(zhǔn)IO開發(fā)

前面分析的文件IO編程都是基于文件描述符的。這些都是基本的IO控制,是不帶緩存的。

這里要討論的IO操作是基于流緩沖的,它是符合ANSIC的標(biāo)準(zhǔn)IO處理。

標(biāo)準(zhǔn)IO提供流緩沖的目的是盡可能減少使用read和write調(diào)用的數(shù)量。標(biāo)準(zhǔn)IO提供了3種

類型的緩沖存儲。

.全緩沖:當(dāng)填滿標(biāo)準(zhǔn)IO緩存后才進(jìn)行實際IO操作。

.行緩沖:當(dāng)在輸入和輸出中遇到新行符時,標(biāo)準(zhǔn)IO庫執(zhí)行IO操作。

.不帶緩沖:標(biāo)準(zhǔn)IO庫不對字符進(jìn)行緩沖。如果用標(biāo)準(zhǔn)IO函數(shù)寫若干字符到不帶緩沖的流中,

則相當(dāng)于用write系統(tǒng)函數(shù)將這些字符寫全相比較的打開文件上。

1.fopen

#include

main()

{

FILE *fp;

int c;

if((fp=fopen("exist","w"))!=NULL)

{

printf("open success !");

}

fclose(fp);

}

/*----------------------------------------

notes:

1.fopen說明

打開文件有三個標(biāo)準(zhǔn),分別為:fopen,fdopen和freopen.它們可以以不同的模式打開,

但都返回一個指向FILE的指針,該指針以將對應(yīng)的IO流相綁定.此后,對文件的讀寫

都是通過這個FILE指針來進(jìn)行.

2.fopen函數(shù)語法:

1)所需的頭文件 #include2)函數(shù)原型:FILE *fopen(const char *path,const char *mode)

3)入口參數(shù)

path:包含要打開的文件路徑及文件名

mode:文件打開狀態(tài)

4)返回值

成功:指向FILE的指針

失敗:NULL

3.mode 取值說明

r或rb???????????????? 打開只讀文件,該文件必須存在

r+或r+b?????????????? 打開可讀寫的文件,該文件必須存在

w或wb???????????????? 打開只寫文件,若文件存在則文件長度清為0,即會擦除文件以前的

內(nèi)容.若文件不存在則建立該文件

w+或w+b?????????????? 打開可讀寫文件,若文件存在則文件長度清為0,即會擦除文件以前的

內(nèi)容.若文件不存在則建立該文件

a或ab???????????????? 以附加的方式打開只寫文件.若文件不存在,則會建立該文件;如果文件

存在,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內(nèi)容會被保留

a+或a+b?????????????? 以附加方式打開可讀寫的文件.若文件不存在,則會建立該文件;如果文件

存在,寫入的數(shù)據(jù)會被加到文件尾后,即文件原先的內(nèi)容會被保留.

4.在每個選項中加入b字符用來告訴函數(shù)庫打開的文件為二進(jìn)制文件,而非純文字文件.不過在linux

系統(tǒng)中會自動識別不同類型的文件而將此符號忽略.

--------------------------------------------*/

2.fwrite

#include

int main()

{

FILE *stream;

unsigned char i,nmemb=3;

char s[3]={'a','b','c'};

stream=fopen("what","w");

i=fwrite(s,sizeof(char),nmemb,stream);

printf("i=%d",i);

fclose(stream);

}

/*---------------------------------

notes:

1.fwrite函數(shù)是用于對指定的文件流進(jìn)行寫操作.

2.fwrite函數(shù)格式

1)所需頭文件:#include2)函數(shù)原型 size_t fwrite(const void *ptr,size_t size,size_t nnmemb,FILE *stream)

3)入口參數(shù)

ptr:存放寫入記錄的緩沖區(qū)

size:寫入的記錄大小

nmemb:寫入的記錄數(shù)

stream:要寫入的文件流

4)函數(shù)返回值:

成功:返回實際寫入到的nmemb數(shù)目

失敗:EOF

---------------------------------------*/

3.fput

#includemain()

{

int c;

fputc(fgetc(stdin),stdout);

}

/*-----------------------------------------

文件在打開之后,根據(jù)一次讀寫文件中字符的數(shù)目可分為字符輸入輸出,行輸入輸出和

格式化輸入輸出.

一.字符輸入輸出

字符輸入輸出函數(shù)一次僅讀寫一個字符.

1.字符輸出函數(shù)語法要點:

1)需頭文件?????????? #include2)函數(shù)原型

int getc(FILE *stream)

int fgetc(FILE *stream)

int getchar(void)

3)入口參數(shù):

stream:要輸入的文件流

4)函數(shù)返回值:

成功:下一個字符

失敗:EOF

2.字符輸入函數(shù)語法要點:

1)需頭文件???????????? #include2)函數(shù)原型

int putc(int c,FILE *stream)

int fputc(int c,FILE *stream)

int putchar(int c)

3)函數(shù)返回值

成功:字符c

失敗:EOF

二.行輸入輸出

1.行輸出函數(shù)語法要點

1)需頭文件 #include2)函數(shù)原型

char *gets(char *s)

char fgets(char *s,int size,FILE *stream)

3)函數(shù)入口參數(shù)

s:要輸入的字符串

size:輸入的字符串長度

stream:對應(yīng)的文件流

4)函數(shù)返回值

成功:s

失敗:NULL

2.行輸入函數(shù)語法要點

1)需頭文件 #include2)函數(shù)原型

int puts(const char *s)

int fputs(const char *s, FILE *stream)

3)函數(shù)入口參數(shù)

s:要輸出的字符串

stream:對應(yīng)的文件流

4)函數(shù)返回值:

成功:s

失敗:NULL

三:格式化輸入輸出

1.格式化輸出函數(shù)1

1)需頭文件? #include2)函數(shù)原型

int printf(const char *format,......)

int fprintf(FILE *fp,const char *format,......)

int sprintf(char *buf,const char *format,......)

3)函數(shù)入口參數(shù)

format:記錄輸出格式

fp:文件描述符

buf:記錄輸出緩沖區(qū)

4)函數(shù)返回值

成功:輸出字符數(shù)(sprintf返回存入數(shù)組中的字符數(shù))

失敗:NULL

2.格式化輸出函數(shù)2

1)需頭文件

#include#include2)函數(shù)原型

int vprintf(const char *format,va_list arg)

int vfprintf(FILE *fp,const char *format,va_list arg)

int vsprintf(char *buf,const char *format,va_list arg)

3)函數(shù)入口參數(shù)

format:記錄輸出格式

fd:文件描述符

arg:相關(guān)命令參數(shù)

4)函數(shù)返回值

成功:存入數(shù)組的字符數(shù)

失敗:NULL

3.格式化輸入函數(shù)

1)需要的頭文件

#include2)函數(shù)原型

int scanf(const char *format,......)

int fscanf(FILE *fp,const char *format,......)

int sscanf(char *buf,const char *format,......)

3)函數(shù)入口參數(shù)

format:記錄輸出格式

fp:文件描述符

buf:記錄輸入緩沖區(qū)

4)函數(shù)返回值

成功:輸出字符數(shù)(sprintf返回存入數(shù)組中的字符數(shù))

失敗:NULL

----------------------------------------------*/

總結(jié)

以上是生活随笔為你收集整理的linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。