用shell中的管道連接n個命令?我試圖在C中實現(xiàn)一個shell。我可以用一個簡單的execvp()來執(zhí)行簡單的命令,但其中一個要求是管理這樣的命令:“l(fā)s -l | head | tail -4”with a for '循環(huán)并且只有一個'pipe()'語句重定向stdin和stdout。幾天后,我有點迷失了。N =簡單命令的數(shù)量(示例中為3:ls,head,tail)命令=帶有命令的結(jié)構(gòu)列表,如下所示:commands[0].argv[0]: ls
commands[0].argv[1]: -l
commands[1].argv[0]: head
commands[2].argv[0]: tail
commands[2].argv[1]: -4所以,我做了for循環(huán),并開始重定向stdin和stdout以便用管道連接所有命令,但是...我只是無能為力它為什么不起作用。for (i=0; i < n; i++){pipe(pipe);if(fork()==0){ // CHILD
close(pipe[0]);
close(1);
dup(pipe[1]);
close(pipe[1]);
execvp(commands[i].argv[0], &commands[i].argv[0]);
perror("ERROR: ");
exit(-1);}else{ // FATHER
close(pipe[1]);
close(0);
dup(pipe[0]);
close(pipe[0]);}}我想要創(chuàng)建的是一系列childed進程:[ls -l] ---- pipe ----> [head] ---- pipe ----> [tail -4]所有這些進程都有一個root(運行我的shell的進程)所以,第一個父親也是shell進程的一個孩子,我已經(jīng)有點筋疲力盡了,有人可以幫助我嗎?我甚至不確定孩子是否應該是執(zhí)行命令的孩子。多謝你們 ??!
用shell中的管道連接n個命令?
幕布斯6054654
2019-08-27 10:36:25