LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 615|回复: 0

请教关于重定向的问题

[复制链接]
发表于 2007-4-11 07:17:19 | 显示全部楼层 |阅读模式
为了实现shell的管道符,用了重定向.程序如下:
  1. void do_with_pipe(char **argv1,char **argv2)
  2. {
  3.             int pid1,pid2;
  4.             int pipe1[2];
  5.             if(pipe(pipe1)<0)
  6.             {
  7.                     perror("pipe failure");
  8.                     exit(EXIT_FAILURE);
  9.             }
  10.             pid1=fork();
  11.             if(pid1<0)
  12.             {
  13.                     perror("fail to fork");
  14.                     exit(1);
  15.             }
  16.             else if(pid1==0)
  17.             {
  18.                     pid2=fork();
  19.                     if(pid2<0)
  20.                     {
  21.                             perror("fail to fork");
  22.                              exit(1);
  23.                     }
  24.                     if(pid2==0)
  25.                     {
  26.                            if(dup2(pipe1[0],STDIN_FILENO)==-1)
  27.                                         perror("fail to dup");
  28.                             close(pipe1[0]);
  29.                             close(pipe1[1]);
  30.                              execvp(argv2[0],argv2);
  31.                     }
  32.                     else{
  33.                             if(dup2(pipe1[1],STDOUT_FILENO)==-1)
  34.                                     perror("fail to dup");
  35.                             close(pipe1[0]);
  36.                             close(pipe1[1]);
  37.                             execvp(argv1[0],argv1);
  38.                    }
  39.             }
  40.             else{
  41.                     if(waiting)
  42.                             waitpid(pid1,NULL,0);
  43.                     else
  44.                             waiting=YES;
  45.             }
  46. }
复制代码
其中,argv1和argv2为已经处理好的参数,
运行时,总是不输出结果,只用主进程结束后才输出.这是为什么?如下:
loyoo:~/programming/kernel$ ./shell
loyoo>>ls|sort
loyoo>>
loyoo>>
loyoo>>
loyoo>>q
01139-1.pdf
01139-1.tar.bz2
explain.ppt
info
info.odt
Linux_schedule.doc
shell
shell.c
syllabus.doc
loyoo:~/programming/kernel$
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表