欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

管道实现ps -aux | grep a.out

程序员文章站 2024-03-26 12:41:41
...
/*************************************************************************
 * File Name: ps_aux.c
 * Author: lixiaogang
 * Mail: 2412799512@qq.com 
 * Created Time: 201706月08日 星期四 2113分08秒
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>

void sys_err(const char *str,int num)
{
    perror(str);
    exit(num);
}

int main(int argc,char *argv[])
{
    int fd[2];
    pid_t pid;
    if(pipe(fd) != 0){
        sys_err("pipe",-1);
    }
    pid = fork();
    if(pid < 0){
        sys_err("fork",-1);
    }else if(pid == 0){
        //ps -aux | grep a.out
        close(fd[0]);
        dup2(fd[1],STDOUT_FILENO);
        close(fd[1]);
        execlp("ps","ps","aux",NULL);
        return -3;
    }


    pid = fork();
    if(pid < 0){
        sys_err("fork",-1);
    } else if(pid == 0){
        close(fd[1]);
        dup2(fd[0],STDIN_FILENO);
        close(fd[0]);
        execlp("grep","grep","a.out",NULL);
    }

    wait(NULL);
    wait(NULL);

    close(fd[0]);
    close(fd[1]);

    return 0;
}