【发布时间】:2016-12-27 14:19:04
【问题描述】:
我目前正在开发一个小型 shell,我正在尝试执行由多个命令组成的作业(例如“ls | sort”)。 由于排序程序似乎遇到了“错误的文件描述符”,因此我在重定向时遇到了问题。 代码如下:
对于第一个命令:
if (pipe(job->tubes[num_comm]) == -1)
{
perror("Erreur création tube");
exit(errno);
}
pid_t pid = fork();
if(pid==0) {
sig->sa_handler=SIG_DFL;
sigaction(SIGINT, sig, NULL);
close(job->tubes[num_comm][0]);
dup2(job->tubes[num_comm][1], 1);
close(job->tubes[num_comm][1]);
execvp(ligne_analysee->commandes[num_comm][0], ligne_analysee->commandes[num_comm]);
}
job->pids[num_comm]=pid;
close(job->tubes[num_comm][0]);
最后一条命令:
pid_t pid = fork();
if(pid==0) {
dup2(job->tubes[num_comm-1][1], 0);
close(job->tubes[num_comm-1][1]);
sig->sa_handler=SIG_DFL;
sigaction(SIGINT, sig, NULL);
execvp(ligne_analysee->commandes[num_comm][0], ligne_analysee->commandes[num_comm]);
}
job->pids[num_comm]=pid;
close(job->tubes[num_comm][1]);
感谢您的帮助!
【问题讨论】: