私はfork()の後に子プロセスでシステムコマンド(またはexecなど)を実行しようとしていて、何らかの入力をプッシュしてから出力を取得しようとしていました。これはfork()の後にあり、pcとcpは親子と親子パイプです。パイプ、フォーク、ノンブロッキングIPC
case 0:
/* Child. */
close(STDOUT_FILENO); /* Close current stdout. */
dup2(cp[1], STDOUT_FILENO);
close(STDIN_FILENO);
dup2(pc[0], STDIN_FILENO);
close(pc[1]);
close(cp[0]);
execlp("cat", "cat", NULL);
exit(1);
default:
/* Parent. */
/* Close what we don't need. */
printf("Input to child:\n");
string theinput("Hey there baby");
write(pc[1], theinput.c_str(), theinput.size());
close(pc[1]);
cout << "The input : " << theinput << endl;
printf("\nOutput from child:\n");
close(cp[1]);
while(read(cp[0], &ch, 1) == 1)
{
write(1, &ch, 1);
outcount++;
}
exit(0);
今(あなたがコードしたい場合:http://pastebin.com/Fh7GrxYm)を、うまく動作しているようですが、私はIRCで#posixで話していたとき、彼らはこれが潜在的にブロックすることができる方法について、狂っ、そしてどのようにして"カーネルがどのように感じているかによって異なります"。
同じ事についてのMSDNのブログの記事がありました:http://blogs.msdn.com/b/oldnewthing/archive/2011/07/07/10183884.aspx
はどのようにしてある場合など、ブロッキングを防ぐことができますか?