【发布时间】:2015-07-22 01:13:09
【问题描述】:
对于 C++ 应用程序,如何以编程方式强制标准输入上的文件结束 (EOF)?
【问题讨论】:
-
“在标准输入上强制 EOF”是什么意思?您可以关闭标准输入(或 cin)。你可以让你的循环单方面终止。您可以寻找到文件的末尾(但这对终端或管道作为输入没有帮助)。您也许可以使用
freopen()强制解决问题;重新分配标准输入以读取 /dev/null 或 NUL:.
对于 C++ 应用程序,如何以编程方式强制标准输入上的文件结束 (EOF)?
【问题讨论】:
freopen() 强制解决问题;重新分配标准输入以读取 /dev/null 或 NUL:.
如果您使用的是类 Unix 系统的终端,请点击 Ctrl-D。在 Windows 中,Ctrl-Z。
编辑:看到“以编程方式”执行此操作的愿望后,我建议尝试fclose(stdin)。如果这还不够好,一个更疯狂的想法可能是使用std::cin.rdbuf() 将流设置为引用真正标准输入以外的其他内容,然后对该流执行您想要的操作。但这开始闻起来很糟糕,就像你在和电脑打架一样,所以我想更多地了解真正的目标是什么。
【讨论】:
libssh 或libssh2,而不是从C 调用popen() 只调用ssh(1),它本身就是另一个C 程序。砍掉中间商!
^Z,怎么了?
实际上,你不能。只要您可以从标准输入读取数据,就没有到达 EOF,实际上您永远无法到达它。但是,您可以关闭 stdin 本身。要关闭它,请执行以下操作:
fclose(stdin);
在此之后,您将无法从stdin 读取数据。
【讨论】:
每个专门为此创建的流都有一个不错的小功能。
它的语法类似于:
stream.setstate(stream.flags)
因此,在您的代码中,您可以有一个简单的条件来触发以下内容:
std::cin.setstate(std::cin.eofbit);
这方面的文档非常少,但在 cppreference.com 和 cplusplus.com 上有一些。
【讨论】: