对于一个C++应用程序,我该如何在程序中强制结束标准输入(stdin)的输入流?
如果你在类Unix系统的终端中,请按Ctrl-D
。在Windows中,则是Ctrl-Z
。
编辑:看到想以“编程方式”完成此操作的愿望,我建议尝试使用fclose(stdin)
。如果不行,一个更疯狂的想法可能是使用std::cin.rdbuf()
将流(stream)设置为引用真正的stdin之外的其他东西,然后对该流进行操作。但这开始有点不好,就像你正在与计算机斗争一样,因此我想了解更多关于实际目标的信息。
libssh
或libssh2
,而不是仅从C中调用popen()
来调用ssh(1)
,后者本身又是另一个C程序。去掉中间人! - John Zwinck^Z
,怎么回事? - Alcott实际上,你做不到。只要你可以从标准输入读取数据,EOF就永远不会被触发。但是你可以关闭stdin
。要关闭它,请执行以下操作:
fclose(stdin);
接下来,您将无法从stdin
读取数据。
对于每个流,都有一个特别为此创建的小函数可用。
它的语法大致如下:
stream.setstate(stream.flags)
所以在你的代码中,你可以有一个简单的条件触发类似以下的操作:
std::cin.setstate(std::cin.eofbit);
这方面的文档相当稀少,但cppreference.com和cplusplus.com上有一些相关内容。
freopen()
来强制解决问题;重新分配标准输入以从/dev/null或NUL:读取。 - Jonathan Leffler