2

私はシステムプログラミングシステムコールについて勉強しています。割り当てにコードブロックがあります(以下を参照)。質問では、A、B、またはCがいくつ印刷されるかを尋ねられます。私の質問は何の意味if(pid == 0)ですか?間違っていると思うif(pid == 0)ので、2xAと2xBが印刷されると分析します。私は書いていますか?2番目の質問は、pid2 = fork()メインを再度実行しますか?

int main()
{
  int pid,pid2;
  int i;
  pid = fork();
  printf("A\n");
  if (pid == 0)
    pid2=fork();
  if (pid2)
    printf("B\n");
  printf("C\n");
  return 0;
}
4

5 に答える 5

6

forkシステムコールは特別です。1回呼び出すと、2回返されます。子に1回、親に1回。

親では子のpidを返し、子では0を返します。したがって、 「これが子の場合if (pid == 0)」を意味します。

于 2012-04-15T19:46:23.833 に答える
3

fork子プロセスに戻り0、子のpidを親プロセスに戻します。マニュアルページは他のすべてをクリアする必要があります。

于 2012-04-15T19:46:21.380 に答える
2

フォークは2つの値を返します:

  • 子プロセスでは0、親プロセスでは正の値。
  • fork()呼び出しの後、2つのプロセスがあります(エラーが発生しない場合、-1が返されます)。

この例では、3つのプロセスを作成し、2A、1B、および3Cを出力します。

于 2012-04-15T19:49:11.687 に答える
1

pid2親プロセスの場合は初期化されません。印刷される量Bは未定義の動作です。

pid=fork()うまくいけば、再び実行されませんmain()...

于 2012-04-15T20:45:17.270 に答える
0

Fork呼び出しの戻り値は、現在のプロセスに応じて異なる値を返します。

親プロセスでコードを実行したいとします。この条件ブロックでコードのその部分をpuします。

p = fork();
if (p > 0)
{
    // We're the parent process
}

また、子プロセスでコードを実行する場合も、同じことが当てはまります。

p = fork();
if (0 == p)
{
    // We're the child process
}

そして残り(親プロセスと子の両方によって実行される)はelseブロックにあります。

于 2012-04-15T19:52:17.410 に答える