首页 > 其他分享 >匿名管道的使用

匿名管道的使用

时间:2023-02-09 11:23:33浏览次数:30  
标签:ps int 管道 匿名 fd 使用 进程 include buf

/*
- 实现 ps aux | grep ***
- 子进程:执行ps aux 子进程结束后,将数据发送给父进程
- 父进程:获取到数据,并进行过滤
- pipe()
- execlp():默认把结果输出的标准终端,需要把子进程的stdout_fileno标准输出重定向到管道的写端 dup2
*/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <wait.h>
int main()
{
    int fd[2];
    int ret=pipe(fd);

    if(ret==-1)
    {
        perror("pipe");
        exit(0);
    }
    
    //创建子进程-创建子进程之前创建管道
    pid_t pid=fork();
    if(pid>0)
    {
        //父进程
        //关闭写端
        close(fd[1]);

        //从管道中读取数据
        char buf[1024]={0};
        int len=-1;

        while (len=read(fd[0],buf,sizeof(buf)-1)>0)
        {
            //过滤数据然后输出
            printf("%s",buf);
            memset(buf,0,1024);//重新设置内存
        }

        wait(NULL);
    }
    else if(pid==0)
    {
        //子进程
        //关闭读端
        close(fd[0]);

        //文件描述符重定向:stdout_fileno->fd[1]
        //第一个参数:目标 第二个参数:对象
        dup2(fd[1],STDOUT_FILENO);
        //执行ps aux
        execlp("ps","ps","aux",NULL);
        perror("execlp");
        exit(0);
    }
    else
    {
        perror("foke");
        exit(0);
    }

}

标签:ps,int,管道,匿名,fd,使用,进程,include,buf
From: https://www.cnblogs.com/xiaoqing-ing/p/17104593.html

相关文章

  • git在工作中如何使用?
    下载Git 下载地址 ,选择自己系统对应的版本下载即可。在你的电脑上生成ssh秘钥,打开终端,执行 ssh-keygen-trsa-C"你公司内部邮箱地址",如果执行成功,切换到 ~/.......
  • 安装pnpm时,提示安装成功, 但是无法使用?
    1、安装:  npminstall-gpnpm2、pnpm -v之后就报一下错误 3、原因:出现改问题是没有配置pnpm的环境变量4、解决方法:一、找到pnpm的存储路径,如: ......
  • Filter与ThreadLocal的使用(笔记)
    @ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//添加自定......
  • 使用nssm注册系统服务的详细方法
    对于Windows平台来说,很多软件或系统的后台服务是基于windows服务的方式运行的,它的优势是稳定可靠,有进程保护,但对于一些普通exe程序(控制台程序或带界面的windows程序)或bat文......
  • [C#] 命令行安装&使用模板
    安装/更新模板:dotnetnewinstall模板名::版本号列出模板:dotnetnewlist使用模板:dotnetnew模板名或模板简称-n项目名称-f.NET版本 ......
  • Linux基础课:第七章笔记--管道,环境变量与常用变量
    开始第七章的学习。技术都是手段,目标是最短的时间内,将学到的知识转化成想要的东西。y总金句:如果想在35岁之前出人头地,能正常工作的不过十来年,那么现在就应该好好学习,工作......
  • Mybatis 复杂对象resultMap的使用
    目录mybatis复杂对象resultMap下面是resultMap的定义普通属性省略说明select相关配置Model代码resultMap处理复杂映射问题Ⅰ多对一查询:学生——老师(1)创......
  • window系统使用virtualBox+vagrant 安装centos
    1,virtualbox官网下载地址:https://www.virtualbox.org/wiki/Downloads下载windows版新电脑可能缺少c++库,导致无法安装,通过bing搜索“MicrosoftVisualC++可再发行程序......
  • Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板
    概述创建一个简单的Grafana仪表板,以实现对日志的快速搜索.有经验的直接用Grafana的Explore功能就可以了.但是对于没有经验的人,他们如何能有一个已经预设了简......
  • 2023 年 2 月国内使用ChatGPT的方式汇总,亲测可用
    刚过完年,不知道大家有没有在春节档期间,跟家人一起观看《流浪地球2》,里面的MOSS,是一款强大的智能机器人。那么当时我们就可以联想到的最近发布的ChatGPT,同样作为一款现实中......