私はプロセス間通信を学んでいます...これは私を悩ませているコードです
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int pfds[2];
pipe(pfds);
if (!fork())
{
printf("I m the child process\n");
close(1); /* close normal stdout */
dup(pfds[1]); /* make stdout same as pfds[1] */
close(pfds[0]); /* we don't need this */
execlp("ls", "ls", NULL);
}
else
{
printf("I m the parent process\n");
close(0); /* close normal stdin */
dup(pfds[0]); /* make stdin same as pfds[0] */
close(pfds[1]); /* we don't need this */
execlp("wc", "wc", "-l", NULL);
}
return 0;
}
これらはいくつかの質問です:- 1) execlp() の後、何も実行されないことに同意しますが、私の printf() ステートメントは execlp() の前にありますが、それでもなぜ実行されないのですか??
2)プログラムはLinuxでパイプコマンドとして機能するため、「ls | wc -l」のように実行されますが、システムは「wc -l | ls」ではなく「ls | wc -l」のようにプログラムを実行することをどのように認識しますか.. ??
3) 2) の質問は、stdout を閉じて pfds[1] として使用し、stdin を閉じて pad[0] として使用したためだと思います。 . ??
4)(gccと同様にXcodeを使用しています)、上記のプログラムをgccで実行するとうまくいきますが、Xcodeで実行すると「SIGTRAP」が表示され、コンソールに「1」が返されます
PLZヘルプ...
PS:一般的な問題で別のスレッドの実行を確認する方法を誰かが教えてくれたらもっといいでしょう!! ありがとうございました !!