gpt4 book ai didi

c - 获取 execvp 的输出并用管道打印

转载 作者:行者123 更新时间:2023-11-30 15:02:38 26 4
gpt4 key购买 nike

我尝试获取 execvp 的输出并将其打印到命名管道。但我该怎么做呢?这是我的代码:

    void *run(void *comm)
{
struct command *com = (struct command *)comm;
int fd[2];
pipe(fd);

if (fork() == 0)
{
close(fd[0]);

dup2(fd[1], 1);
dup2(fd[1], 2);
close(fd[1]);

execvp(com->list[0], com->list);
}
else
{
char buffer[1024] = {0};

close(fd[1]);
unlink(com->namePipe);
if(mkfifo(com->namePipe, 0644) != 0)
{
fprintf(stderr, "Impossible de créer le tube nommé.\n");
exit(EXIT_FAILURE);
}
if((fd[0] = open(com->namePipe, O_WRONLY)) == -1)
{
fprintf(stderr, "Impossible d'ouvrir l'entrée du tube nommé.\n");
exit(EXIT_FAILURE);
}
while (read(fd[0], buffer, sizeof(buffer)) != 0)
{
write(1, buffer, strlen(buffer));
memset (buffer, 0, sizeof(buffer));
}
}
return NULL;

}

我不被允许使用popen。

编辑:我这样做了但没有工作^^

最佳答案

*fd = pipe_fds[0];

在这里,您取消引用指针fd,但您从未给fd赋值,因此它的内容是不确定的。尝试取消引用未初始化的指针会导致未定义的行为。

这里你实际上甚至不需要指针。只需将 fd 声明为 int 并直接赋值即可。

int fd;
...
fd = pipe_fds[0];

完成此操作后,您可以使用readfd读取以获取程序的输出。

关于c - 获取 execvp 的输出并用管道打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979180/

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