Linux中管道的c实现

Linux中管道的c实现,c,pipe,C,Pipe,我正在执行以下命令 ls | grep“某物” 用c语言编程。谁能帮我一下吗 我想要fork一个子对象,在那里我将使用execlp运行ls命令。 在父级中,我得到子级和grep的输出(再次使用execlp) 不可能吗?管道只是从一个标准输出读取,然后写入另一个标准输出。 是否要实现具有管道功能的shell解释器? 首先,您需要一个shell解析器来解析commond。 然后,您将拥有管线功能。 …管道只是从一个标准输出读取,然后写入另一个标准输出。 是否要实现具有管道功能的shell解释器? 首

我正在执行以下命令

ls | grep“某物”

用c语言编程。谁能帮我一下吗

我想要fork一个子对象,在那里我将使用execlp运行ls命令。 在父级中,我得到子级和grep的输出(再次使用execlp)


不可能吗?

管道只是从一个标准输出读取,然后写入另一个标准输出。
是否要实现具有管道功能的shell解释器?
首先,您需要一个shell解析器来解析commond。
然后,您将拥有管线功能。

管道只是从一个标准输出读取,然后写入另一个标准输出。
是否要实现具有管道功能的shell解释器?
首先,您需要一个shell解析器来解析commond。
然后,您将拥有管线功能。

我终于找到了它的代码

#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;
}
#包括
#包括
#包括
内部主(空)
{
int-pfds[2];
管道(pfds);
如果(!fork()){
关闭(1);/*关闭正常标准输出*/
dup(pfds[1]);/*使标准输出与pfds[1]相同*/
关闭(pfds[0]);/*我们不需要这个*/
execlp(“ls”、“ls”、NULL);
}否则{
关闭(0);/*关闭正常标准*/
dup(pfds[0]);/*使标准DIN与pfds[0]相同*/
关闭(pfds[1]);/*我们不需要这个*/
execlp(“grep”,“SOMETHING”,NULL);
}
返回0;
}

我终于找到了它的代码

#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;
}
#包括
#包括
#包括
内部主(空)
{
int-pfds[2];
管道(pfds);
如果(!fork()){
关闭(1);/*关闭正常标准输出*/
dup(pfds[1]);/*使标准输出与pfds[1]相同*/
关闭(pfds[0]);/*我们不需要这个*/
execlp(“ls”、“ls”、NULL);
}否则{
关闭(0);/*关闭正常标准*/
dup(pfds[0]);/*使标准DIN与pfds[0]相同*/
关闭(pfds[1]);/*我们不需要这个*/
execlp(“grep”,“SOMETHING”,NULL);
}
返回0;
}

您需要什么帮助?你尝试了什么?
系统(“ls | grep”SOMETHING“)?您能更详细地说明您需要什么帮助吗?你尝试了什么?
系统(“ls | grep”SOMETHING“)?你能更具体一点吗?不,我不想实现shell解释器。使用execlp,我想执行ls并将其传输到grep,grep也使用execlp运行。为什么不作为单个命令运行呢?这有点复杂。不过,popen是获取shell命令输出的最佳选择。不,我不想实现shell解释器。使用execlp,我想执行ls并将其传输到grep,grep也使用execlp运行。为什么不作为单个命令运行呢?这有点复杂。不过,popen是获取shell命令输出的最佳选择。