質問箱/32 - if elseの条件分岐について

Top > 質問箱 > 32

投稿者エンド?
状態
投稿日2008-10-20 (月) 13:54:01

質問 Edit

『例題で学ぶLinuxプログラミング』と言う本を読んでいるのですが、どうにも分からないところがあるので質問してみました. 以下のプログラムなのですが、(4章、5章ではたくさんこの手のif-elseが使われています.)

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	pid_t child;
	int status;

	if((child = fork()) == -1){
		perror("fork");
		exit(EXIT_FAILURE);
	}else if(child == 0){
		puts("in child");
		printf("\tchild pid = %d\n", getpid());
		printf("\tchild ppid = %d\n", getppid());
		exit(EXIT_SUCCESS);
	}else{
		waitpid(child, &status, 0);
		printf("in parent\n");
		printf("\tparent pid = %d\n", getpid());
		printf("\tparent ppid = %d\n", getppid());
		printf("\tchild exited with %d\n", status);
	}
	exit(EXIT_SUCCESS);
}

これをコンパイルリンクし、実行すると

else ifとelseの中身が両方実行されます。 これはなぜなのでしょか?

回答 Edit

  • なんのために fork をするというと、もちろん新しいプロセスを作るためです。新しいプロセスを作ると元のプロセスは消えるかどうかというと、消えたら作った意味がないですし、もちろんNOです。つまり、プロセスが2つになるわけですが、プロセスが2つあるということは、そのプログラムは2回実行されるわけです(fork した地点から)。親プロセスと子プロセスに別の処理をさせたい場合、if 文で分岐したいですよね。それが上のコードです。 -- s1080134 2008-10-21 (Tue) 01:04:49

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

xrea