我正在用C创建一个父子进程,这些进程使用一个字符数组作为共享内存,我希望执行按此顺序执行
Wait(NULL)
,但执行顺序为
int main(void)
{
if (fork( ) == 0)
{ //child
if( (id = shmget(key, sizeof(char[n]), 0)) == -1 )
{
exit(1);
}
shm = shmat(id, 0, 0);
if (shm == (char *) -1)
exit(2);
.......................//some work
..........................
}
else //parent
{
if( (id = shmget(key, sizeof(char[n]), 0666 | IPC_CREAT)) == -1 )
{
exit(1);
}
shm = shmat(id, 0, 0); //attach shared memory to pointer
if (shm == (char *) -1)
exit(2); //error while atatching
....
.....
do
{
//parent turn here
wait(NULL);
....................................
//some work ..................
}
while(done!=1);
shmdt(NULL);
if( shmctl(id, IPC_RMID, NULL) == -1 )//delete the shared memory
{
perror("shmctl");
exit(-1);
}
}
exit(0);
}
答案 0 :(得分:1)
您可能希望在调用fork()之前调用shmget(IPC_CREAT),因为POSIX在调用之后不保证执行的顺序,因此子进程中的shmget()可能会失败,因为父进程没有没有机会创建共享段。
wait()等待子进程结束。它不用于在父进程和子进程之间进行计划。
你究竟想做什么?