我最近学习了C语言中的fork()
函数。由于这个函数会创建两个并发进程,并且这两个进程共享内存,所以我有以下代码:
#include<stdio.h>
int main()
{
int pid,i;
i=0;
pid=fork();
if(pid==0)
{
i++;
printf("child process:: address of i:%u value of i:%d\n",(int)&i,i);
}
else if(pid>0)
{
wait(NULL);
i--;
printf("parent process:: address of i:%u value of i:%d\n",(int)&i,i);
}
return 0;
}
我得到的输出是:
child process:: address of i:3215563096 value of i:1
parent process:: address of i:3215563096 value of i:-1
但是由于每次子进程都先执行,所以内存位置3215563096处的值应该变为+1,而父进程的值为0。
我的期望输出是:
child process:: address of i:3215563096 value of i:1
parent process:: address of i:3215563096 value of i:0
请问有人能告诉我哪里出了错吗?
mmap
,shm_open
等。 - cnicutarfork
不是C函数(也不在C语言标准中),而是Posix标准函数(实际上,在Linux上是一个系统调用)。 - Basile Starynkevitch#include <unistd.h>
来声明fork()
,以及#include <sys/wait.h>
来声明wait()
。在编译所有函数的原型不在作用域内时,您不应该进行编译。 - Jonathan Leffler