我正在读《Unix环境下的高级编程》,章节5.5,P150,上面说:
1。在关闭文件之前,所有缓冲的输出数据都会被刷新。任何可能被缓冲的输入数据都将被忽略....
2.当进程正常终止时,…,所有带有未写缓冲数据的标准I/O流都会被刷新…
在1中,这是否意味着当我使用fclose()关闭流时,缓冲的输入将被忽略,因此一些数据将不会被写入文件。如果不是,"file is closed"是什么意思?
在2中,"未写的缓冲数据被刷新"是否意味着缓冲数据将被写入文件?
在#1中,"缓冲输入"是指程序可以从流中读取的数据…也就是说,一旦你关闭了流,你就不能从流中读取更多的数据了。缓冲的输入是可能已经从与流关联的文件/设备中读取并放置在流的输入缓冲区中的数据,但实际上还没有被代码读取(基本上是提前检索并等待您读取)。丢弃它并不会阻止向文件中写入任何内容,因为它是从文件中读取的输入,而不是要将写入的输出。
在#2中,他们说当你的程序结束时(正常情况下),任何你的程序已经写到那些流的东西,实际上还没有写到磁盘上的文件(或与流相关的任何设备)将被刷新,即。实际写入磁盘,而不是位于缓冲区中。通常你的流写是暂时保存在缓冲区中,只有当缓冲区被刷新时才会真正写入(当缓冲区满时可能会发生,当fflush()
被调用时,当流被关闭时,等等)