0

我有两个用 C++ 编写的进程,一个接一个地通过管道传输。一个人向另一个人提供一些信息stdin,然后他们都继续做其他事情。

问题是第二个进程挂在里面cin.getline(),即使没有更多的数据要交换。解决方案是第一个进程到fclose(stdout),并且有效,除非我使用包含在脚本中的进程。因此,显然stdout脚本在通过该过程关闭后仍然打开 - 这似乎很公平,但就我而言,我可以关闭它吗?谢谢

4

1 回答 1

0

由于您的程序不会终止,因此您可以exec your-program在脚本中而不是仅仅your-program在管道的写入端保存一个打开的文件描述符(以及一堆其他东西)。

或者,在后台启动您的程序并退出脚本。

您也可以关闭标准输出,但如果您在启动程序之前这样做,它将无法使用关闭的文件描述符。所以你必须在程序运行时关闭。这并不是微不足道的。我可以考虑在后台启动程序,关闭标准输出(exec 1>&-用于此)并将程序带回前台。

于 2014-01-13T08:00:51.847 回答