2

次のコードがあり、「A」、「B」、「C」、「D」、「E」が何回印刷されるかを尋ねられます

fun() {
  printf("A");
  fork();
  printf("B");
  if (fork() != 0) {
     printf("C");
     fork();
     printf("D");
  }
  printf("E");
}

したがって、次のようになります。

A
A 
B
E

上記の私の答えが正しいかどうかわかりませんか?そして、その線は何をif(fork() !=0 )しますか?

4

3 に答える 3

6

ドキュメントから:

成功すると、子プロセスのPIDが親に返され、0が子に返されます。失敗すると、親に-1が返され、子プロセスは作成されず、errnoが適切に設定されます。

于 2012-12-09T22:12:03.780 に答える
4

1スレッドはaを印刷し、2スレッドはbを印刷します。2つのフォークのそれぞれですが、2つの親だけがifステートメントに入り、cを出力します。これらの2つのフォークのそれぞれと4つのprocすべてがdを出力します。次に、6つのprocのそれぞれ(if-forkからの2つの子とif printeから出てくる4つのスレッド)。

順序を決定することはできませんが、各文字の数は次のとおりです。

x1

b x2

c x2

d x4

e x6

于 2012-12-09T22:19:53.020 に答える
2

この行if (fork() != 0) { ... }は、現在のプロセスが元のフォークプロセスの子ではないことを確認しています。親プロセスのみがこのブロックのコードを実行します。

これが機能するfork()のは、親プロセスでPIDを返し、子プロセスで0を返し、エラーで-1を返すためです。

于 2012-12-09T22:17:21.823 に答える