标准I/O库总结(standard I/O library)

这篇博客详细总结了C语言中的标准I/O库,包括文件指针的打开与关闭、打开模式、错误处理、文件缓冲的设置与管理、读数据(字符、行、直接I/O)与写数据的操作,以及文件指针操作和格式化输入输出。文章强调了错误处理的重要性,并介绍了相关函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开与关闭文件指针

要使用标准I/O库的第一步就是获得文件描述结构FILE*。前两个函数分别根据文件路径和文件描述符打开文件。第三个函数将会根据文件路径打开文件并将其与第三个参数绑定在一起。如果第三个参数之前有关联文件,该文件将被关闭(close)。这个函数的作用有点像dup2,可以将stdin/stdout/stderr关联到指定文件。
       #include <stdio.h>

       FILE *fopen(const char *path, const char *mode);

       FILE *fdopen(int fd, const char *mode);

       FILE *freopen(const char *path, const char *mode, FILE *stream);

关闭文件相对简单,只有一个函数。

int fclose(FILE *fp);

打开模式

在上面的函数中有一个mode参数。该参数决定了文件是否以读(r)、写(w)、追加(a)方式打开。在追加方式(append)下所有的数据将写在文件末尾,类似于open()函数的O_APPEND参数。 该方式主要用于多个进程/线程写同一文件。
以上模式均可以搭配一个“+”(例如r+, w+, a+)。作用是增加读或写权限。例如r+相比于r增加了写权限,w+相比于w增加了读权限。 对于w,w+,a,a+模式,当文件不存在时将被自动创建。

错误处理

对于一个健壮的程序,好的错误处理时必不可少的。尝试获取文件指针后应当检查是否成功并尽可能打印错误信息。当错误发生时errno将会设置,因此可以使用下面的程序段打印错误信息。

if (!fp) {
    perror(NULL);
}


文件缓冲

下图简单描述了标准I/O的函数调用结构。对于每一个文件指针,标准I/O分别包含一个写缓冲和一个读缓冲。当用户程序调用fscanf()或fprintf()读写文件时,数据会先储存在缓冲或从缓冲读取数据。标准I/O支持三种不同的缓冲方式:

1. 无缓冲(unbuffered)。所有的读写操作将直接导致系统调用read/write。
2. 行缓冲(line buffered)。写数据将先存储在写缓冲中直到遇到newline字符或者缓冲满,再调用write。一个特别情况是: 当用户程序调用读函数(例如fgets())从一个无缓冲或者行缓冲的文件读取数据,并且导致read系统调用时,所有在行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值