gpt4 book ai didi

c - C中多管道和命令执行的实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:12 25 4
gpt4 key购买 nike

<分区>

我有一个家庭作业要求我创建一个 shell 来执行由管道分隔的多个命令。这是我用于 fork child 和执行命令的代码片段:

    for (int i = 0; i < commands; i++) {

place = commandStarts[i];

if((pid = fork()) < 0) exit(1);
else if (pid == 0) {
if(i < pipe_counter && dup2(fds[j + 1], 1) < 0) exit(1);// If this is not the last remaining command

if(j != 0 && dup2(fds[j-2], 0) < 0) exit(1); // If this is not the first command

for(int c = 0; c < 2*pipe_counter; c++) close(fds[c]);

if(execvp(argv[place], argv+place)) exit(0); // Execute and if it returns anything, exit!
}
j+=2;
}

for(int i = 0; i < 2 * pipe_counter; i++) close(fds[i]);

while ((wait(&status)) != pid); // The only program that gets to this point is the
// parent process, which should wait for completion

尽管如此,它在简单示例中似乎工作得很好,但在一些更复杂的示例中,评分系统给了我这个提示:您应该等待管道链中的所有进程终止,然后再显示提示,不只是最后一个!

你能告诉我我的错误在哪里吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com