我的问题与使用文件描述符有关,文件描述符可以是stdin或打开的文件。
我想弄明白:
cin >> x
等待用户输入,但打开的文件上的fgets(line, len, file)
永远不会停止。 (我知道拖延对于读取文件没有意义,但是我想弄清楚流是如何工作的。)答案 0 :(得分:3)
从根本上说,使用cin
(或其他istream
)与fgets
(或fscanf
等)阅读之间没有区别
在这两种情况下,如果您从标准输入读取,它们将停止等待输入,并在接收到标准输入已到达文件末尾的正确指示时返回EOF(例如, ctrl + d ,Windows上的 ctrl + z 或 F6 。当然,如果将标准输入重定向到文件,程序将像通常那样感知文件结尾。
同样,在这两种情况下,当从磁盘上的文件读取数据时,它们实际上 停止 - 但至少在典型的情况下,仍然是几十毫秒的数量级,所以一个人通常不会感知它。尽管如此,是的,当CPU向驱动器控制器发出读取命令时,在从磁盘驱动器到达数据之前,存在极长暂停(就CPU时钟周期数而言) 。在少数情况下,当您从文件中读取人类可感知的文件时,您可以获得足够长的延迟,甚至可能涉及人为干预。现在这种情况非常罕见,但曾几何时,阅读特定文件可能会涉及操作员安装磁带等问题。