UNIX环境高级编程之第5章:标准I/O库-习题

5.1 setbuf和setvbuf可以用来更改缓冲的类型,可以使用setbuf函数打开或关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ的缓冲区。通常在此之后该流就是全缓冲,但是如果和该流和终端设备相关,那么改成行缓冲。为了关闭缓冲,将buf设置为NULL

void setbuf(FILE *restrict fp, char *restrict buf);

int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);

主要判断一下是不是终端设备,设置mode

size就设置成BUFSIZ就好

5.2  fgets函数读入数据,直到行结束或缓冲区满(当然会留一个字节存放null字节)。同样,fputs只负责讲缓冲区的内容输出直到一个null字节,而并不考虑缓冲区是否包含换行符。所以并没有影响。

5.3 当printf没有输出任何字符时,如printf(""),则函数返回0

5.4 当程序有EOF,再移植问题上考虑 系统是有符号还是无符号字符类型的,因为EOF为0。

5.5 fflush()是工作在流上的,它仅仅冲洗缓存从应用程序到操作系统

fsync工作在底层,它告诉操作系统冲洗缓存到物理设备

总之fsync是再文件描述符上工作,它不管文件流和它的缓存,文件流是在一个应用程序中,文件描述符实在操作系统内核中进行操作

所以说应该先调用fflush将内存缓冲区的数据加载到cpu中,然后用fsync将内核缓冲载入到磁盘

5.6 当程序交互运行时候,标准输入和标准输出均为行缓冲方式,每次调用fgets时候标准输出设备将自动冲洗。所有不需要fflush


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码随想录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值