gpt4 book ai didi

c++ - 读取管道输入

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:52 25 4
gpt4 key购买 nike

我正在努力了解 OSX/Linux 中的管道。我有一个名为 foo 的实用程序。我希望它解析我从其他任意实用程序通过管道传输给它的任何输入,如果没有输入则退出。我目前正在阅读 cin 的内容,如果我将某些内容传递给 foo,它就可以正常工作。但是,如果我不将任何内容通过管道传输到 foo,则读取到 cin 的操作将无限期地阻塞。

显然我做错了什么/愚蠢的事情。解决这个问题的正确方法是什么?

最佳答案

这取决于你想做什么。如果你想在输入完成运行时退出,只需检查标准输入是否仍在工作。当输入程序终止时,它会得到一个 EOF。

while (cin.good()) {
cin << whatever;
...
}

但是,如果您不想等到输入程序终止,那么您可能不得不等待一些超时。最简单的方法是在文件描述符0上使用select(),然后只有在有数据时才读取,如果超时则结束。或者,如果你想用 C++ 的方式来做,我推荐 Boost Asio .您可以使用 posix::stream_descriptor用于处理 Posix 系统下的 native 文件描述符。

关于c++ - 读取管道输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17696188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com