1

私はソケット プログラミングについて学んでおり、C プログラミングもよく知っています。

たとえば、私の C プログラミングの知識に基づいて、else ステートメント内の何かが処理されると、対応する if ステートメント内のコードは実行されるべきではありません。例えば、

int a = 1;
if(a == 1) process1 ;
else process2;

上記のステートメントに基づいて、a は 1 に等しいため、実行するprocess1必要がありますが、実行process2されません。これは正しいと思います。

私の質問は、次のコードで示されています。

int main(void){
   pid_t pid;
   int pp[2];

   pipe(pp);

   pid = fork();
   if(pid == 0){
      printf("Processed pid == 0\n");
   }else{
      printf("Processed pid != 0\n");
   }

   return 0;
}

このプログラムを実行すると、次の出力が得られます。

Processed pid == 0
Processed pid != 0

私の質問は、なぜifandelseステートメントの両方の結果が表示されるのですか?

4

1 に答える 1

2

フォークは、新しいプロセスを作成するために使用されます。古いプロセスでは新しいプロセスの pid を返し、新しいプロセスでは 0 を返します。出力の各行は別のプロセスによって出力されました。

http://linux.die.net/man/2/fork

理解を助けるために: fork() を呼び出した瞬間から、もう 1 つのプロセスが、作成したプログラムを実行しています。これら 2 つのプロセスで異なる処理を実行できるようにするために、 fork() は元のプロセスと複製で異なる値を返します。私が書いたように、元のプロセスは新しいプロセスの pid を受け取ります。これは、2 つのプロセス間のさらなる通信に非常に役立ちます。

于 2013-04-28T11:07:07.463 に答える