【发布时间】:2017-06-19 23:12:28
【问题描述】:
我的问题与使用文件描述符有关,它可以是标准输入或打开的文件。
我想弄清楚:
- 在什么情况下从流中读取会导致停止。为什么
cin >> x等待用户输入,但据我所知,打开的文件上的fgets(line, len, file)永远不会停止。 (我知道拖延对于读取文件没有意义,但我正试图弄清楚流在这里是如何工作的。) - 如何检测已打开文件与标准输入的流结束?似乎当您从 Stdin 读取时,如果您在最后,它会等待输入。如果从文件中读取并且您在最后,则会以某种方式触发 EOF 并且它不会停止。而且我认为 Stdin 的流结束不一定意味着输入的结束,只是程序已经读取了到目前为止所有可用的输入,对吧?
【问题讨论】:
-
C 标签不相关,
fgets()的行为在 C 和 C++ 之间可能不同。 -
如果
file参数为stdin(例如),fgets可以阻塞,或者如果底层 I/O 设备阻塞,则实际上只是阻塞。 -
有什么具体的测试用例会触发stalling?你已经知道Why is iostream::eof inside a loop condition considered wrong?了?
-
@Stargateur - 尽管 C++ 标准委托给
<cstdio>的 C 标准... -
那是因为标准输入没有结尾。 (除非它来自文件)