C语言 父子进程不能共享全局变量

父子进程不能共享全局变量。
父子进程中的任何一方修改了全局变量,只是修改了副本,只对自己可见,对另一方不可见。
C语言中即使加了static也不行。

#include <stdio.h>
#include <unistd.h>

// 初始值是0
int flag;

int main()
{
    pid_t pid;
    // 父进程和子进程执行相同代码即main函数
    // 父进程创建子进程并返回子进程的PID,PID>0
    // 子进程调用fork函数返回0,不继续创建子进程
    pid = fork();
    if (pid > 0) // 父进程逻辑
    {
        printf("father process is PID: %d\n", getpid());
        while (1) {
            if (flag == 0) {
                flag = 1;
                printf("father process set flag = 1\n");
            }

            sleep(1);

            printf("father process get flag is %d\n", flag);
        }
    }
    else if (pid == 0) // 子进程逻辑
    {
        printf("son process pid is %d\n", getpid());
        while (1) {
            if (flag == 0) {
                flag = 2;
                printf("son process set flag = 2\n");
            }

            sleep(1);

            printf("son process get flag is %d\n", flag);
        }
    }
    else
    {
        printf("fork failed\n");
        return 1;
    }

    return 0;
}

posted on 2024-05-05 10:10  王景迁  阅读(67)  评论(0编辑  收藏  举报

导航