我无法理解在我的代码中运行函数execve()后发生了什么?

时间:2017-05-26 15:58:54

标签: c

我在Unix中编写shell,当我运行ls | wc > file时,它运行良好,但是当我运行ls > file时,我的程序挂起并且对任何事情都没有反应。命令ls写入文件的结果,以及所有后续函数被处理,并输出到终端,但程序不响应键盘输入。在程序开始时,我断开连接 termios.c_lflag = (termios.c_lflag ^ ICANON) ^ ECHO; tcsetattr(2, TCSANOW, &termios);但是,如果ls | wc > file一切顺利,那就不应该是原因。

在此功能中,我们采用fd,fd[1] = open(file, O_RDWR | O_CREAT | O_TRUNC, 0666)fd[0] = 0fd[0] = in,其中in = fd[1]来自之前的pipe(fd)。 我无法理解,为什么会这样?请帮帮我) 还有一个问题,为什么后面的“C”在execve之后没有写到终端和文件?后面的“A”写入终端,“B”写入文件的开头,“C”丢失,“D”进入终端。

void command_to_file(char *f_pth, char **mas, char **env, int *fd)

pid_t   pid;

pid = fork();
if (pid == 0)
{
    write(1, "A", 1);
    ft_putendl(mas[0]);
    dup2(fd[0], 0);
    dup2(fd[1], 1);
    write(1, "B", 1);
    if (execve(f_pth, mas, env) < 0)
    {
        write(2, "error execve", 12);
        return ;
    }
    write(1, "C", 1);
    write(2, "C", 1);
    close(fd[0]);
}
else
{
    wait(0);
    write(1, "D", 1);
    close(fd[1]);
}

0 个答案:

没有答案