gpt4 book ai didi

c - 在 C 中使用管道,是的 | head 进入无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:28 30 4
gpt4 key购买 nike

按照这个 SO 问答

Connecting n commands with pipes in a shell?

我尝试执行 yes | head 但它在无限循环中运行,或者它永远不会响应。什么问题。

我确实做了一些修改,这里是运行代码

#include <unistd.h>

struct command
{
const char **string;
};

辅助函数

pid_t start(command* command, pid_t pid, int* status, int in, int out) {
(void) pid;
pid_t cpid;
int childInt;

cpid = fork();
if (cpid == 0) {

if (in != 0)
{
dup2(in, 0);
close(in);
}


if (out != 1)
{
dup2(out, 1);
close(out);
}

execvp(c->string[0], c->string);
_exit(1);
}

waitpid(cpid, &childInt, 0);
}


*status = childInt;
return c->pid;
}

在我的主要功能中

for(int i = 0; i < n; i++)
//New command every loop
int p = pipe(fd);
if (p == 0)
{
start_command(c, 0, &status, in, fd[1]);
close(fd[1]);
in = fd[0];
}
continue;
}
dup2(in, 0);

最佳答案

如果要执行yes | head,需要创建yeshead两个进程,需要用管道连接起来。您没有代码来执行此操作,您只需执行 yes 并将其传递给 |头。这会导致 yes 永远地输出 "| head"

你不能只传递 yes| headexecvp。您可以execvp 一个 shell 并传递给它 yes | head,因为 shell 具有创建管道、生成多个进程并适本地将它们连接起来的必要代码。

关于c - 在 C 中使用管道,是的 | head 进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55318246/

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