king821221 发表于 2006-1-1 14:03:57

编写一个类似shell的程序时候遇到一个问题

最近在做老师布置的作业,要求我们实现一个类似shell的程序,并且支持命令管道,如ps -xj |more,我编了一个,但是出了问题,请大家帮我看一下
源程序:

代码:
#include<unistd.h>
#include<sys/stat.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<fcntl.h>
#include<string.h>

int main(int argc,char* argv[]){
   int n,fd[2];
   pid_t pid;

   if(pipe(fd)<0)
         exit(-1);

   if((pid=fork())<0)
         exit(-1);
   else if(pid>0){//parent
         close(fd[0]);

   if(fd[1]!=STDOUT_FILENO){
         
             if(dup2(fd[1],STDOUT_FILENO)!=STDOUT_FILENO)
                     printf("dup error");
             close(fd[1]);
      }

      execlp("ps","ps","-xj",(char*)0);      
      if(waitpid(pid,NULL,0)<0)
         printf("wait error");
      exit(0);

   }else{//child

      printf("enter child");
      close(fd[1]);

      if(fd[0]!=STDIN_FILENO){
      
            if(dup2(fd[0],STDIN_FILENO)!=STDIN_FILENO)
               printf("dup error");
            close(fd[0]);
      }
      execlp("more","more",(char*)0);
      exit(0);
}
}
结果整个程序就停住了。弄了半天不知什么回事,请各位指点
页: [1]
查看完整版本: 编写一个类似shell的程序时候遇到一个问题