gpt4 book ai didi

使用 pipe() 在 linux 中链接管道

转载 作者:太空狗 更新时间:2023-10-29 12:06:55 25 4
gpt4 key购买 nike

我知道如何在 Linux 中使用 C 创建一个看起来像 cat/tmp/txt |grep foo 的管道,但是我在实现多个链式管道时遇到了问题,例如 cat/tmp/1.txt | uniq-c |排序。如何在 Linux 中使用 pipe() 用 C 实现?

更新:我已经弄明白了。如果有人有同样的问题,这里是代码:

enum PIPES {
READ, WRITE
};


int filedes[2];
int filedes2[2];
pipe(filedes);
pipe(filedes2);

pid_t pid = fork();
if (pid == 0) {
dup2(filedes[WRITE], 1);
char *argv[] = {"cat", "/tmp/1.txt", NULL};
execv("/bin/cat", argv);
exit(0);
}
else {
close(filedes[1]);
}

pid = fork();
if (pid == 0) {
dup2(filedes[READ], 0);
dup2(filedes2[WRITE], 1);
char *argv[] = {"uniq", "-c", NULL};
execv("/usr/bin/uniq", argv);
}
else {
close(filedes2[1]);
}

pid = fork();
if (pid == 0) {
dup2(filedes2[READ], 0);
char *argv1[] = {"sort", NULL};
execv("/usr/bin/sort", argv1);
}

waitpid(pid);

最佳答案

你得到一对文件描述符 - 我们称它们为 ab。对 pipe 的后续调用会为您提供文件描述符 cd

因此,您将 b 连接到 c 以链接这两个进程。创建另一对文件描述符并将 d 连接到 e,等等。

关于使用 pipe() 在 linux 中链接管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300301/

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