Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭Qt应用程序的STDIN 我正在研究一个项目,它有多个C++可执行文件,用命名管道进行通信。主应用程序(App1)生成其余的应用程序。产卵时,它使用以下命令关闭子对象的STDIN: close(STDIN_FILENO);_C++_Qt_Cpu Usage - Fatal编程技术网

关闭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()
移动到,似乎不再有问题了