Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有两个用 C++ 编写的进程,一个接一个地通过管道传输。一个人向另一个人提供一些信息stdin,然后他们都继续做其他事情。
stdin
问题是第二个进程挂在里面cin.getline(),即使没有更多的数据要交换。解决方案是第一个进程到fclose(stdout),并且有效,除非我使用包含在脚本中的进程。因此,显然stdout脚本在通过该过程关闭后仍然打开 - 这似乎很公平,但就我而言,我可以关闭它吗?谢谢
cin.getline()
fclose(stdout)
stdout
由于您的程序不会终止,因此您可以exec your-program在脚本中而不是仅仅your-program在管道的写入端保存一个打开的文件描述符(以及一堆其他东西)。
exec your-program
your-program
或者,在后台启动您的程序并退出脚本。
您也可以关闭标准输出,但如果您在启动程序之前这样做,它将无法使用关闭的文件描述符。所以你必须在程序运行时关闭它。这并不是微不足道的。我可以考虑在后台启动程序,关闭标准输出(exec 1>&-用于此)并将程序带回前台。
exec 1>&-