Linux系统编程_4_标准I/O(附:清空缓冲区方法)

本文介绍了Linux系统编程中的标准I/O,包括缓冲类型、打开流、读写流等操作。标准I/O库使用缓冲来提高效率,提供全缓冲、行缓冲和不带缓冲三种类型。函数如fopen、fclose、getc/fputc、fgets/fputs等用于读写文件,fflush用于冲洗缓冲区。文章还讨论了临时文件和清空缓冲区的方法。
摘要由CSDN通过智能技术生成

     标准I/O属于库文件,系统调用和库是有区别的,为了方便,标准库中实现了和所有系统调用同名的函数;参考《APUE》

      这里部分不解释过多,网上的资料很多,其实熟悉的人基本都知道,我们不可能记住所有的函数的,特别是参数等等,我们能做的就是尽量熟悉他,用到时查一下就能用就行了。


标准I/O函数,摘自于网络:

当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针。该对象通常是一个结构,它包含了标准I/O库为管理该流所需的所有信息,包括:用于实际I/O的文件描述符、指向用于该缓冲区的指针、缓冲区的长度、当前在缓冲区的字符数以及出错标志等。为引用一个流,需将FILE指针作为参数传递给每个标准I/O函数。

对于标准输入、标准输出和标准出错,他们的文件描述符对应STFIN_FILENO、STDOUT_FILENO和STDERR_FILENO。这三个标准I/O流通过预定义stdin、stdout和stderr加以引用。这三个文件指针以及标准I/O函数都定义在头文件<stdio.h>中。

缓冲

标准I/O库提供缓冲的目的是尽可能减少使用read和write调用次数。提供了三种类型的缓冲:

1) 全缓冲:需在填满标准I/O缓冲区后才进行实际I/O操作。

2) 行缓冲:当在输入和输出中遇到换行符时,标准I/O库执行I/O操作。

3) 不带缓冲:标准I/O库不对字符进行缓冲存储。

一般而言,标准出错是不带缓冲的,打开终端设备的流是行缓冲的,其他所有流则是全缓冲的。当流是全缓冲,但该缓冲区是局部填写时,可用fflush函数冲洗。

可调用下面的函数更改缓冲区类型:

#include <stdio.h>

void setbuf(FILE *stream, char *buf);

int setvbuf(FILE *stream, char *buf, intmode, size_t size);

任何时候,我们都可以强制冲洗一个流:

#include <stdio.h>

int fflush(FILE *stream);

此函数将使该流所有未写的数据都被传送至内核。作为一个特例,如若fp是NULL,则此函数将导致所有输出流被冲洗。

打开流

#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);

这三个函数的区别是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值