Linux标准I/O库常用函数总结(一)

        标准I/O库(stdio)及其头文件stdio.h为底层I/O系统调用提供了一个通用的接口,该库已经成为ANSI标准C的一部分。在很多方面,使用标准I/O库的方式和使用底层文件描述符一样,需要先打开一个文件以建立一个访问途径。这个操作的返回值作为其他I/O库函数的参数。在标准I/O库中,与底层文件描述符对应的是流(stream),它被实现为指向结构FILE的指针,注意,不要将这里的文件流与C++语言中的输入输出流(iostream)混淆。

        在启动程序时,有3个文件流是自动打开的,分别为stdin,stdout,stderr。都定义在头文件stdio.h中,分别表示标准输入、标准输出与标准错误输出,与底层文件描述符0,1,2对应。

        这里简单对几个常用的标准I/O库函数做一些总结。

1.fopen函数

fopen函数用来打开一个文件,函数原型如下:

#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);

参数filename字符 串包含欲打开的文件 路径及文件名,参数mode字符串则代表着流形态

mode去下列字符串中的值(注意各符号表示的意义, r(read): 读, w(write): 写, a(append): 追加, b(binary):二进制文件,+:读和写 ):
"r"或"rb":以只读方式打开文件,该文件必须存在。
"w"或"wb":以写方式打开,并把文件长度截短为0
"a"或"ab":以写方式打开,新内容追加在文件尾。
"r+"或"rb+"或"r+b":以更新方式打开(读和写)
"w+"或"wb+"或"w+b":以更新方式打开(读和写),并把文件长度截短为0
"a+"或"ab+"或"a+b":以更新方式打开(读和写),并把文件内容追加在文件尾

注意:UNIX和Linux把所有文件都看作为二进制文件;mode参数必须是一个字符串,而不是一个字符,所以总是应该使用双引号而不是单引号。
fopen在成功时返回一个非空的FILE*指针,失败时返回NULL值,NULL值在头文件stdio.h中定义。
可用的文件流数量有限制,由头文件stdio.h中定义的FOPEN_MAX定义,在Linux系统中,通常是16.

2. fclose函数

用来关闭指定的文件流stream,使所有尚未写出的数据都写出,使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。

函数原型:

#include <stdio.h>
int fclose(FILE *stream);

因为stdio库会对数据进行缓冲,如果程序需要确保数据已经全部写出,就应该调用fclose函数。程序正差结束时,会自动敌对所有还打开的文件流调用fclose函数,但是如果这这样做就没机会检查fclose报告的错误了。如果流关闭成功,则返回0,否则返回EOF(-1);如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。

3.fread函数

函数原型:

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream)

从文件流stream中读数据,读取ntimes个记录,每个记录长度由size定义,如果调用成功返回成功读取到数据缓冲区里的记录个数,即nitems,而不是字节数。如不成功,返回实际读取的记录个数。当到达文件尾时,它的返回值可能会小于nitems,甚至可以为0.

4.fwrite函数

函数原型;

#include <stdio.h>
    size_t fwrite(void *ptr, size_t size, size_t nitems, FILE *stream)

frwrite与fread有相似的接口,从制定的数据缓冲区里取出数据记录,并把它们写到输出流中。返回值是成功写入的记录个数。

注意:不推荐把fread和fwrite用于结构化数据。部分原因在于用fwrite写的文件在不同计算机体系结构之间可能不具备可移植性。

5.fflush函数

函数原型:

#include <stdio.h>
int fflush(FILE *stream)

fflush库函数作用是把文件流里的所有未写出数据立刻写出。注意:调用fclose函数隐含执行一次fflush操作,所以不必在调用fclose之前调用fflush。

        

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值