[英]Shell and job with multiple commands
我目前正在使用小型外壳,并且正在尝试执行由多个命令(例如“ 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]);
谢谢你的帮助!
我误解了管道的工作方式,写入端将由孩子修改,而不是父母修改,读取端应直接在孩子上关闭。 父级应将读取端保持打开状态,以便下一个孩子从中读取(在本例中为第二条命令)...谢谢,问题已解决!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.