匿名管道的使用
/*
- 实现 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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)