关于C中文件流和缓冲区的问题
questions about file stream and buffer in C
我正在阅读 "Advanced programming in the Unix Environment",在第 5.5 条 P150 中,它说:
1.Any buffered output data is flushed before the file is closed. Any input data that may be buffered is discared....
2.When a process terminates normally, ... ,all standard I/O streams with unwritten buffered data are flushed ...
在1中,这是否意味着当我使用fclose()关闭一个流时,缓冲的输入将被丢弃,这样一些数据就不会被写入文件。如果不是,"file is closed"是什么意思?
在2中,"unwritted buffered data are flushed"是不是缓冲的数据会写入文件?
在 #1 中,"buffered input" 指的是您的程序可以从 流中读取 的数据...所以它基本上是说一旦您关闭了流,您就可以'从中读取更多数据。缓冲输入是可能已从与流关联的 file/device 读取并放置在流的输入缓冲区中的数据,但实际上尚未被 您的 代码读取(提前检索,等待您阅读,基本上)。丢弃它不会阻止任何内容写入文件,因为它是从文件读取的输入,而不是写入的输出。
在 #2 中,他们说当你的程序结束时(通常),你的程序写入那些流的任何内容实际上都没有写入磁盘上的文件(或任何与流)将被刷新,即。实际上写入磁盘而不是坐在缓冲区中。通常,您的流写入会暂时保存在缓冲区中,并且仅在刷新缓冲区时才真正写入(这可能发生在缓冲区已满、调用 fflush()
时、流关闭时等)
我正在阅读 "Advanced programming in the Unix Environment",在第 5.5 条 P150 中,它说:
1.Any buffered output data is flushed before the file is closed. Any input data that may be buffered is discared....
2.When a process terminates normally, ... ,all standard I/O streams with unwritten buffered data are flushed ...
在1中,这是否意味着当我使用fclose()关闭一个流时,缓冲的输入将被丢弃,这样一些数据就不会被写入文件。如果不是,"file is closed"是什么意思?
在2中,"unwritted buffered data are flushed"是不是缓冲的数据会写入文件?
在 #1 中,"buffered input" 指的是您的程序可以从 流中读取 的数据...所以它基本上是说一旦您关闭了流,您就可以'从中读取更多数据。缓冲输入是可能已从与流关联的 file/device 读取并放置在流的输入缓冲区中的数据,但实际上尚未被 您的 代码读取(提前检索,等待您阅读,基本上)。丢弃它不会阻止任何内容写入文件,因为它是从文件读取的输入,而不是写入的输出。
在 #2 中,他们说当你的程序结束时(通常),你的程序写入那些流的任何内容实际上都没有写入磁盘上的文件(或任何与流)将被刷新,即。实际上写入磁盘而不是坐在缓冲区中。通常,您的流写入会暂时保存在缓冲区中,并且仅在刷新缓冲区时才真正写入(这可能发生在缓冲区已满、调用 fflush()
时、流关闭时等)