关闭Qt应用程序的STDIN 我正在研究一个项目,它有多个C++可执行文件,用命名管道进行通信。主应用程序(App1)生成其余的应用程序。产卵时,它使用以下命令关闭子对象的STDIN: close(STDIN_FILENO);
它将关闭Qt应用程序的STDIN 我正在研究一个项目,它有多个C++可执行文件,用命名管道进行通信。主应用程序(App1)生成其余的应用程序。产卵时,它使用以下命令关闭子对象的STDIN: close(STDIN_FILENO);,c++,qt,cpu-usage,C++,Qt,Cpu Usage,它将STDOUT和STDERR重定向到特定于子进程的其他文件。这使得App1的输出仅来自App1,而不来自任何子项。它还允许App1接受来自STDIN的输入,而不让它被子进程捕获 其中一个子进程是Qt应用程序。当生成时,它会尽可能多地使用CPU,大大降低我的计算机速度。如果我不关闭子进程的STDIN,此行为将停止(但子进程将捕获STDIN,而不是主进程,这是我不想要的) 为什么会发生这种情况?我如何防止Qt应用程序使用所有CPU周期?也许可以满足Qt应用程序的需求?在fork之后但在exec之前
STDOUT
和STDERR
重定向到特定于子进程的其他文件。这使得App1的输出仅来自App1,而不来自任何子项。它还允许App1接受来自STDIN的输入,而不让它被子进程捕获
其中一个子进程是Qt应用程序。当生成时,它会尽可能多地使用CPU,大大降低我的计算机速度。如果我不关闭子进程的STDIN
,此行为将停止(但子进程将捕获STDIN
,而不是主进程,这是我不想要的)
为什么会发生这种情况?我如何防止Qt应用程序使用所有CPU周期?也许可以满足Qt应用程序的需求?在
fork
之后但在exec
之前使用dup2
dup2
将用另一个文件描述符替换给定的文件描述符,以便您可以用文件替换stdin。快速示例:
if(fork() == 0)
{
int somefd = open("somefile", O_RDONLY);
// replace stdin (0) with somefd before exec-ing
if(dup2(somefd, 0) == -1)
{
// cunning plan failed
}
// exec Qt app here
}
我想我在解决另一个问题时发现了问题所在。在重定向
STDERR
和STDOUT
文件描述符之前,我正在关闭STDIN
文件描述符。这把我使用freopen()
重定向它们时使用的索引弄乱了
重定向后,我将STDIN的close()
移动到,似乎不再有问题了