自定义shell在dup2之后停止工作

时间:2017-04-21 13:53:56

标签: c linux

我正在向shell编写一个函数,我需要将输出重定向到文件。例如,用户写入:ls -l >> filels -l应写入文件。几乎所有事情都是正确的,但在第一次调用我的函数程序后停止,我不能写任何其他东西。下面我介绍我的功能,我希望有任何解决问题的线索:

void execute2(char *command, char **argv, char **argv2)
{
    pid_t pid;
    int status;

    if ((pid = fork()) < 0) 
    {     
        printf("*** ERROR ***\n");
            exit(1);
    }
    else if (pid == 0) 
    {      
        close(1);    
        parse(command, argv, argv2);
        int output = open(*argv2, O_APPEND | O_WRONLY);
        dup2(output,1);      
        if (strcmp(argv[0], "exit") == 0) 
            exit(0);       
        if (execvp(*argv, argv) < 0) 
        {    
            printf("*** ERROR ***\n");
            exit(1);
        }
        close(output); 
    }
    else 
    {                                  
        while (wait(&status) != pid);
    }
} 

command是来自用户的命令,argv是指令和参数的一部分,argv2是输出文件。

1 个答案:

答案 0 :(得分:-2)

@Jonathan Leffler我检查了这个,我认为它没有解决问题。我建议当我第一次调用execute2时,它可以正常工作,但我从未完成过这个过程。或者我没有找不到什么