用管道模拟linux命令不起作用

斯托法

我是Linux的新手,并在C中使用管道。我正在尝试编写一个程序来执行以下命令:ps aux | grep root | wc -l使用管道。

问题是我的程序没有在终端中显示任何内容,这与原始命令不一样!

这是我的代码:

#include <stdlib.h> // exit
#include <stdio.h>  // printf
#include <unistd.h> // execlp

int main(int argc, char *argv[]) {

int p1[2], p2[2];
int f1, f2;

if(pipe(p1) == -1) {
    exit(1);
}

if(pipe(p2) == -1) {
    exit(2);
}

f1 = fork();
if(f1 < 0) {
    exit(1);
} else if(f1 == 0) {

    close(p1[1]);
    close(0);
    dup2(p1[0], 0);
    close(p1[0]);

    close(p2[0]);
    close(1);
    dup2(p2[1], 1);
    close(p2[1]);

    execlp("grep", "grep", "root", NULL);

} else {

    f2 = fork();
    if(f2 < 0) {
        exit(2);
    } else if(f2 == 0) {

        close(p2[1]);
        close(0);
        dup2(p2[0], 0);
        close(p2[0]);

        execlp("wc", "wc", "-l", NULL);

    } else {

        close(p1[0]);
        close(1);
        dup2(p1[1], 1);
        close(p1[1]);

        execlp("ps", "ps", "aux", NULL);

    }

}

}
安德烈·扎卡良(Andrey Zakaryan)
#include <stdlib.h> 
 #include <stdio.h>  
 #include <unistd.h> 
 #include <sys/wait.h>

int main(int argc, char *argv[]) 
{

    int p1[2], p2[2];
    int f1, f2, f3;
    if(pipe(p1) == -1) {
        exit(1);
    }   
    f1 = fork();
    if(f1 < 0) {
        exit(1);
    } 
    else if(f1 == 0) {
        dup2(p1[1], 1);
        close(p1[0]);
        close(p1[1]);
        execlp("ps", "ps", "aux", NULL);
        perror("ps");
        exit(1);
    }
    if(pipe(p2) == -1) {
        exit(1);
    }
    f2 = fork();
    if(f2 < 0) {
        exit(1);
    } 
    else if(f2 == 0) {
        dup2(p1[0], 0);
        close(p1[0]);
        close(p1[1]);
        dup2(p2[1], 1);
        close(p2[0]);
        close(p2[1]);
        execlp("grep", "grep", "root", NULL);
        perror("grep");
        exit(1);
    }
    f3 = fork();
    if(f3 < 0) {
        exit(1);
    } 
    else if(f3 == 0) {
        dup2(p2[0], 0);
        close(p2[0]);
        close(p2[1]);
        close(p1[0]);
        close(p1[1]);
        execlp("wc", "wc", "-l", NULL);
        perror("wc");
        exit(1);
    }
    close(p1[0]);
    close(p1[1]);
    close(p2[0]);
    close(p2[1]);
    wait(NULL);
    wait(NULL);
    wait(NULL);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

linux命令中的管道不起作用。

来自分类Dev

管道命令不起作用

来自分类Dev

xargs:用管道替换命令$(...)不起作用

来自分类Dev

xargs:用管道替换命令$(...)不起作用

来自分类Dev

exec命令中的管道不起作用

来自分类Dev

模拟不起作用

来自分类Dev

Linux日期命令不起作用

来自分类Dev

'at'命令在Arch Linux中不起作用

来自分类Dev

在管道中使用时,查找命令不起作用

来自分类Dev

为什么命令nc的管道内容不起作用?

来自分类Dev

剪切命令似乎在管道中不起作用

来自分类Dev

为什么管道对于期望stdin的命令不起作用?

来自分类Dev

管道命令到 wsl awk 不起作用

来自分类Dev

为什么这个使用管道的命令不起作用?

来自分类Dev

用$ match聚合管道在PHP mongo中不起作用

来自分类Dev

用Mockito在Kotlin中模拟队列似乎不起作用

来自分类Dev

用LuisRecognizer模拟LUIS响应不起作用

来自分类Dev

Android模拟器显示在Linux中不起作用

来自分类Dev

模拟对象不起作用

来自分类Dev

模拟对象不起作用

来自分类Dev

用排毒模拟RNCamera不起作用,称为非模拟impl

来自分类Dev

Linux watch命令在脚本中不起作用

来自分类Dev

Python-执行Shell命令在Linux上不起作用

来自分类Dev

Linux watch命令在脚本中不起作用

来自分类Dev

linux hostname -f命令在RHEL上不起作用

来自分类Dev

Wi-Fi网络接口-Linux命令不起作用

来自分类Dev

ifconfig命令在Kali Linux上不起作用

来自分类Dev

Hbase命令不起作用

来自分类Dev

Crontab命令不起作用