linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput
標準IO開發
前面分析的文件IO編程都是基于文件描述符的。這些都是基本的IO控制,是不帶緩存的。
這里要討論的IO操作是基于流緩沖的,它是符合ANSIC的標準IO處理。
標準IO提供流緩沖的目的是盡可能減少使用read和write調用的數量。標準IO提供了3種
類型的緩沖存儲。
.全緩沖:當填滿標準IO緩存后才進行實際IO操作。
.行緩沖:當在輸入和輸出中遇到新行符時,標準IO庫執行IO操作。
.不帶緩沖:標準IO庫不對字符進行緩沖。如果用標準IO函數寫若干字符到不帶緩沖的流中,
則相當于用write系統函數將這些字符寫全相比較的打開文件上。
1.fopen
#include
main()
{
FILE *fp;
int c;
if((fp=fopen("exist","w"))!=NULL)
{
printf("open success !");
}
fclose(fp);
}
/*----------------------------------------
notes:
1.fopen說明
打開文件有三個標準,分別為:fopen,fdopen和freopen.它們可以以不同的模式打開,
但都返回一個指向FILE的指針,該指針以將對應的IO流相綁定.此后,對文件的讀寫
都是通過這個FILE指針來進行.
2.fopen函數語法:
1)所需的頭文件 #include2)函數原型:FILE *fopen(const char *path,const char *mode)
3)入口參數
path:包含要打開的文件路徑及文件名
mode:文件打開狀態
4)返回值
成功:指向FILE的指針
失敗:NULL
3.mode 取值說明
r或rb???????????????? 打開只讀文件,該文件必須存在
r+或r+b?????????????? 打開可讀寫的文件,該文件必須存在
w或wb???????????????? 打開只寫文件,若文件存在則文件長度清為0,即會擦除文件以前的
內容.若文件不存在則建立該文件
w+或w+b?????????????? 打開可讀寫文件,若文件存在則文件長度清為0,即會擦除文件以前的
內容.若文件不存在則建立該文件
a或ab???????????????? 以附加的方式打開只寫文件.若文件不存在,則會建立該文件;如果文件
存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留
a+或a+b?????????????? 以附加方式打開可讀寫的文件.若文件不存在,則會建立該文件;如果文件
存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留.
4.在每個選項中加入b字符用來告訴函數庫打開的文件為二進制文件,而非純文字文件.不過在linux
系統中會自動識別不同類型的文件而將此符號忽略.
--------------------------------------------*/
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函數是用于對指定的文件流進行寫操作.
2.fwrite函數格式
1)所需頭文件:#include2)函數原型 size_t fwrite(const void *ptr,size_t size,size_t nnmemb,FILE *stream)
3)入口參數
ptr:存放寫入記錄的緩沖區
size:寫入的記錄大小
nmemb:寫入的記錄數
stream:要寫入的文件流
4)函數返回值:
成功:返回實際寫入到的nmemb數目
失敗:EOF
---------------------------------------*/
3.fput
#includemain()
{
int c;
fputc(fgetc(stdin),stdout);
}
/*-----------------------------------------
文件在打開之后,根據一次讀寫文件中字符的數目可分為字符輸入輸出,行輸入輸出和
格式化輸入輸出.
一.字符輸入輸出
字符輸入輸出函數一次僅讀寫一個字符.
1.字符輸出函數語法要點:
1)需頭文件?????????? #include2)函數原型
int getc(FILE *stream)
int fgetc(FILE *stream)
int getchar(void)
3)入口參數:
stream:要輸入的文件流
4)函數返回值:
成功:下一個字符
失敗:EOF
2.字符輸入函數語法要點:
1)需頭文件???????????? #include2)函數原型
int putc(int c,FILE *stream)
int fputc(int c,FILE *stream)
int putchar(int c)
3)函數返回值
成功:字符c
失敗:EOF
二.行輸入輸出
1.行輸出函數語法要點
1)需頭文件 #include2)函數原型
char *gets(char *s)
char fgets(char *s,int size,FILE *stream)
3)函數入口參數
s:要輸入的字符串
size:輸入的字符串長度
stream:對應的文件流
4)函數返回值
成功:s
失敗:NULL
2.行輸入函數語法要點
1)需頭文件 #include2)函數原型
int puts(const char *s)
int fputs(const char *s, FILE *stream)
3)函數入口參數
s:要輸出的字符串
stream:對應的文件流
4)函數返回值:
成功:s
失敗:NULL
三:格式化輸入輸出
1.格式化輸出函數1
1)需頭文件? #include2)函數原型
int printf(const char *format,......)
int fprintf(FILE *fp,const char *format,......)
int sprintf(char *buf,const char *format,......)
3)函數入口參數
format:記錄輸出格式
fp:文件描述符
buf:記錄輸出緩沖區
4)函數返回值
成功:輸出字符數(sprintf返回存入數組中的字符數)
失敗:NULL
2.格式化輸出函數2
1)需頭文件
#include#include2)函數原型
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)函數入口參數
format:記錄輸出格式
fd:文件描述符
arg:相關命令參數
4)函數返回值
成功:存入數組的字符數
失敗:NULL
3.格式化輸入函數
1)需要的頭文件
#include2)函數原型
int scanf(const char *format,......)
int fscanf(FILE *fp,const char *format,......)
int sscanf(char *buf,const char *format,......)
3)函數入口參數
format:記錄輸出格式
fp:文件描述符
buf:記錄輸入緩沖區
4)函數返回值
成功:輸出字符數(sprintf返回存入數組中的字符數)
失敗:NULL
----------------------------------------------*/
總結
以上是生活随笔為你收集整理的linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: th标签能包裹select吗_电影《八佰
- 下一篇: python怎么写出来的_如何写出优雅又