繁体   English   中英

使用多个命令进行Shell和作业

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM