关于C中的文件流和缓冲区的问题

时间:2015-07-15 07:11:22

标签: c stream buffer

我正在阅读“Unix环境中的高级编程”,见5.5,P150,它说:

  

1.在文件关闭之前刷新任何缓冲的输出数据。可以缓冲的任何输入数据都会被丢弃....   2.当进程正常终止时,...,所有带有未写入缓冲数据的标准I / O流都被刷新...

在1中,是否意味着当我使用fclose()关闭流时,缓冲的输入将被丢弃,以便某些数据不会被写入文件。如果没有,“文件关闭”是什么意思?

在2中,“未写入的缓冲数据是否被刷新”,是否将缓冲的数据写入文件?

1 个答案:

答案 0 :(得分:0)

在#1中,“缓冲输入”指的是您的程序可以从流中读取的数据...所以它基本上说,一旦关闭流,您就无法从中读取更多数据。缓冲输入是可能已从与流关联的文件/设备读取并放置在流的输入缓冲区中的数据,但实际上尚未被您的代码读取(提前检索并且等着你读它,基本上)。丢弃它并不会阻止任何内容写入文件,因为它是输入从文件读取,而不是输出写入

在#2中,他们说当你的程序结束时(通常),你的程序写入那些实际上没有写入磁盘上的文件的流(或任何与流相关的设备)会被冲洗,即。实际写入磁盘而不是坐在缓冲区中。通常,您的流写入暂时保存在缓冲区中,并且仅在刷新缓冲区时实际写入(可能在缓冲区已满,调用fflush()时,流关闭时等)。