【发布时间】:2013-12-14 13:22:32
【问题描述】:
我编写了一个将值写入文件的守护程序。我观察到的是,当我继续写文件时,文件中没有任何可见的内容。另一方面,如果我使用fflush() 方法,则字符在文件中可见。为什么 fflush() 会有所作为?
【问题讨论】:
标签: c linux file-io flush buffering
我编写了一个将值写入文件的守护程序。我观察到的是,当我继续写文件时,文件中没有任何可见的内容。另一方面,如果我使用fflush() 方法,则字符在文件中可见。为什么 fflush() 会有所作为?
【问题讨论】:
标签: c linux file-io flush buffering
默认情况下,stdio 是完全缓冲的,除非它正在写入终端,在这种情况下它是行缓冲的,或者 stderr,它根本不缓冲。
您可以使用setbuf() 函数禁用缓冲。
setbuf(fp, NULL);
【讨论】:
因为它是缓冲的。这意味着所有写入都存储在内存中的缓冲区中,直到缓冲区被刷新。对于printf 和朋友来说,它有一个换行符,或者你显式调用fflush,或者当然是缓冲区满了。
【讨论】:
stdout 可能有一个缓冲区大小,磁盘文件另一个。