sw4vm001 pipe # ./pipe message 打入命令,结果如下
in parent process, send message: message
in child process,receive message: message
应先进子进程执行,再退出子进程,执行父进程。 可出来的结果正好相反。 我个人的理解有问题吗?
#include
#include
int main(int argc, char*argv[])
{
int f_des[2];
int pid;
char msg[BUFSIZ];
if(argc != 2)
{
printf("Usage: %s message\n",argv[0]);
return 1;
}
if(pipe(f_des) == -1) {
perror("cannot create the IPC pipe");
return 1;
}
pid = fork();
if(pid == -1)
{
perror("cannot create new process");
return 1;
}
else if(pid == 0)
{
close(f_des[1]);
if(read(f_des[0],msg,BUFSIZ) == -1)
{
perror("cannot create new process");
return 1;
}
else
{
printf("in child process,receive message: %s\n",msg);
_exit(0);
}
}
else
{
close(f_des[0]);
if(write(f_des[1],argv[1],strlen(argv[1])) == -1)
{
perror("parent process cannot write data to pipe");
return 1;
}
else
{
printf("in parent process, send message: %s\n",argv[1]);
}
wait(NULL);
_exit(0);
}
return 0;
}
黄富强 于 2008-06-04 18:07:21发表:
我的执行结果:
in child process,receive message: message
in parent process, send message: message
执行顺序有不确性,取决于执行系统的状态;
当父进程通过fork创建了子进程之后, 父进程和子进程的执行顺序是无法控制的. 如果想控制, 有两种办法: 使用vfork创建或者调用等待函数wait;
vfork和fork的不同是fork对进程执行顺序没有规定,而vfork则是子进程先运行;
但不影响结果的正确性.
[ 本帖最后由 黄富强 于 2008-6-4 18:10 编辑 ]