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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值