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

关于C语言中文件流和缓冲区的问题,c,stream,buffer,C,Stream,Buffer,我正在读“Unix环境中的高级编程”,在第5.5节,第150页,它说: 1.在关闭文件之前,将刷新所有缓冲输出数据。任何可能被缓冲的输入数据都会被存储。… 2.当进程正常终止时,所有带有未写入缓冲数据的标准I/O流都将刷新 在1中,这是否意味着当我使用fclose()关闭一个流时,缓冲的输入将被释放,这样一些数据就不会写入文件。如果不是,“文件已关闭”是什么意思 在2中,“未写入的缓冲数据被刷新”是否意味着缓冲数据将被写入文件?在1中,“缓冲输入”指的是程序可以从流中读取的数据。。。所以它基本上

我正在读“Unix环境中的高级编程”,在第5.5节,第150页,它说:

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

在1中,这是否意味着当我使用fclose()关闭一个流时,缓冲的输入将被释放,这样一些数据就不会写入文件。如果不是,“文件已关闭”是什么意思

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

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

在#2中,他们说当你的程序结束时(正常情况下),你的程序写入到那些流中的任何东西,如果没有写入磁盘上的文件(或者与流相关的任何设备),都将被刷新,也就是说,实际上写入磁盘,而不是放在缓冲区中。通常,流写入暂时保存在缓冲区中,只有在刷新缓冲区时才实际写入(这可能发生在缓冲区已满、调用
fflush()
时、流关闭时等情况下)。

在#1中,“缓冲输入”是指数据将写入磁盘上的文件,我认为。根据你们所说,输出流是写入文件的数据,输入流是从文件读取的数据,对吗?或者,“缓冲输入”与输入流不同?@tiantong“缓冲输入”是从磁盘上的文件读取到流缓冲区的数据。。但在调用函数读取输入(如
fgets()
fread()
等)之前,不一定被程序使用。“输入”和“输出”与程序相关,而不是与文件相关。