我有两个用C ++编写的进程,一个接一个地传输。一个人向其他人stdin
提供一些信息,然后他们继续做其他事情。
问题是第二个进程在cin.getline()
内挂起,即使没有更多数据需要交换。解决方案是针对fclose(stdout)
的第一个进程,这是有效的,除非我使用脚本中包含的进程。显然,脚本的stdout
在通过该过程关闭之后仍然是打开的 - 这看起来很公平,但在我的情况下,我可以关闭它吗?感谢
答案 0 :(得分:0)
由于您的程序没有终止,您可以在脚本中exec your-program
而不是your-program
并在管道的写入端保存一个打开的文件描述符(以及其他一些东西)
或者,在后台启动您的程序并退出脚本。
您也可以关闭标准输出,但如果在启动程序之前执行此操作,则无法使用已关闭的文件描述符。所以你必须在程序运行时关闭它。这并非完全无足轻重。我可以考虑在后台启动程序,关闭标准输出(使用exec 1>&-
)并将程序带回前台。