簡體   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