1

我正在尝试执行以下命令,

ls | grep "SOMETHING"

在c编程语言中。任何人都可以帮我解决这个问题。

我想分叉一个孩子,我将在其中使用 execlp 运行 ls 命令。在父级中,我得到子级和 grep 的输出(再次使用 execlp)。

不可能吗?

4

2 回答 2

9

我终于找到了它的代码。

#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("grep", "SOMETHING", NULL);
}
return 0;
}
于 2013-07-14T08:32:55.953 回答
3

管道只是从一个标准输出读取并写入另一个标准输入。
你想实现一个带有管道功能的 shell 解释器吗?
首先,您需要一个 shell 解析器来解析 commond。
然后,您将拥有一个管道特征。
...

于 2013-06-18T10:51:29.083 回答