2

次のプログラムの出力が2ではなく1である理由を誰かが説明できますか?

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

int main(int argc, char *argv[])
{
int x = 1;
int *y = &x; 

pid_t pid = fork();

if (pid == 0) {
    *y = 2;
    exit(0);
} else {
    wait(NULL);
    printf("father: %d\n", x); 
}   

return 1;
}
4

1 に答える 1

3

forkスレッドを作成するのではなく、まったく新しいプロセスを作成します。

子のアドレス空間は親のアドレス空間のコピーであり、共有していません。

親によって行われた変更は、子からは見えません。その逆も同様です。そうするように特別に設定されている場合を除きます (たとえば、共有メモリ セグメントを介して)。

于 2012-05-14T15:40:32.907 に答える