我有以下取自Beej’s Guide to Unix IPC的“Pipes” section的代码。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int pfds[2];
pipe(pfds);
if (!fork()) {
close(1); /* close normal stdout */
dup(pfds[1]); /* make stdout same as pfds[1] */
close(pfds[0]); /* we don't need this */
execlp("ls", "ls", NULL);
} else {
close(0); /* close normal stdin */
dup(pfds[0]); /* make stdin same as pfds[0] */
close(pfds[1]); /* we don't need this */
execlp("wc", "wc", "-l", NULL);
}
return 0;
}此代码允许用户查看特定目录中有多少个文件。如何编辑此代码以实现更长的管道cat /etc/passwd | cut –f1 –d: | sort?有没有人知道怎么做,因为我完全卡住了。任何帮助都将不胜感激。
发布于 2014-03-18 04:29:55
感觉像是家庭作业,所以我只给你一些建议:
较长的管道有两个管道,因此您需要调用
发布于 2014-03-18 04:56:06
您需要一些管道(取决于命令列表的长度)。但是:对于中间的一个进程,最多需要两个管道对-fds,对于第一个和最后一个,您需要一个管道对-fds。一定要关闭不需要的管道-fds-否则,子进程可能得不到EOF,并且永远不会完成。
和(正如user3392484所说的):检查所有系统调用的错误条件,并将它们报告给调用者。这将使生活变得更容易。
我在最后几天实现了类似的东西,也许你想看看:pipexec.c。
致以亲切的问候-- Andreas
https://stackoverflow.com/questions/22464543
复制相似问题