为什么在setvbuf之前不能执行其他文件操作?

时间:2017-03-11 22:00:27

标签: c

glibc setvbuf(http://man7.org/linux/man-pages/man3/setvbuf.3p.html)的文档声明:

  

setvbuf()函数可以在指向的流之后使用   stream与打开的文件相关联,但在任何其他操作之前   (除了对setvbuf()的不成功调用之外)执行   流。

有这个限制有什么意义? (but before any other operation...

为什么不能首先写入文件然后再调用setvbuf()

1 个答案:

答案 0 :(得分:1)

我怀疑这个限制是从Unix操作系统中完全取消的。参考ANSI C的基本原理:

  

4.9.5.6 setvbuf函数

     UNIX系统V已采用

setvbuf来控制   流缓冲的性质和指定I / O缓冲区的大小。

特定实现可以以非便携式扩展的形式为UB提供有用的机制。对输出流来说更容易,可能只是刷新,但对输入流来说却不那么简单。

没有水晶球,我想重新打开文件并设置缓冲区更容易,而不是考虑重新缓冲所涉及的每个边缘情况。