プロセスをフォークしてコマンドを実行しようとしています。名前付きパイプを作成し、STDOUT をパイプに書き込む子プロセスからコマンドを実行しようとしています。親プロセスはパイプから読み取ります。私の問題は、親プロセスがパイプからデータを完全に読み取っていないことです。これがコードです。
fifo_fd = mkfifo(MY_FIFO, 0666);
FILE *fp = fdopen(fifo_fd, "r");
childpid = fork();
if (childpid == 0)
{
dup2(fifo_fd, STDOUT_FILENO);
dup2(fifo_fd, STDERR_FILENO);
close(fifo_fd);
execv(arg_list[0], arg_list);
_exit (127);
}
else
{
//parent process
if(waitpid(childpid, &status,WNOHANG ) == -1) {
// now we kill the child and return failure.
}
fcntl(fd, F_SETFL, O_NONBLOCK);
while((fgets(buf, sizeof(buf)-1,fp))) {
strcat(result,buf); //we copy the buf to result
}
return success;
}