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