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;
}