我正在做类似bash的命令,我开始实现多个管道和reddirections。
目前我有这段代码:
int execute_pipe(t_comm *com, t_struct *tool, char **env)
{
int pipefd[2 * tool->nbr_pipe];
int i;
int j;
pid_t pid;
i = -1;
//pipefd = xmalloc(sizeof(int) * tool->nbr_pipe * 2);
while (++i != tool->nbr_pipe)
pipe(pipefd + i * 2);
j = 0;
while (com != NULL)
{
pid = fork();
if (pid == 0)
{
if (com->next != NULL)
dup2(pipefd[j + 1], 1);
if (j != 0)
dup2(pipefd[j - 2], 0);
i = -1;
while (++i < 2 * tool->nbr_pipe)
close(pipefd[i]);
printf("%s\n", com->argv[0]);
execve(com->argv[0], com->argv, env);
}
com = com->next;
j = j + 2;
}
i = -1;
while (++i < 2 * tool->nbr_pipe)
close(pipefd[i]);
i = -1;
while (++i != tool->nbr_pipe + 1)
wait(NULL);
}
但这似乎不起作用。当我发布类似&#34; ls |的东西时猫-e&#34;它只是显示正常的ls然后我必须做一个控制C来回到我的提示。 你知道这可能来自哪里吗?
对于缩进感到抱歉,Stack溢出似乎不喜欢emacs表格......