红联Linux门户
Linux帮助

help me

发布时间:2008-06-04 16:41:35来源:红联作者:CHINA_ALLEN
以下程序运行结果为什麽和我认为的结果不一样呢?

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;
}
文章评论

共有 1 条评论

  1. 黄富强 于 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 编辑 ]