在linux中通过管道实现ls_wc

本文详细介绍了如何在Linux环境下利用gcc编译,通过无名管道实现ls命令输出文件列表并由wc统计行数的过程,强调了进程间通信及错误处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux中通过管道实现ls_wc

该代码使用linux下的gcc编译,通过该例子可以更好的理解进程间使用无名管道通信,本例子不太完美之处,是没有判断函数返回值,对于代码量比较大的话,要养成一个判断返回值的良好习惯。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<sys/wait.h>
int main(int argc, char* argv[])
{
	int i;
	int pid;
	int pipefd[2];
	pipe(pipefd);
	for(i = 0;i<2;i++){//创建两个子线程
		pid = fork();
		if(pid == 0){//子线程也会fork()线程,所以创建的子线程要让它跳出循环
			break;
		}
	}
	if(i == 0){//兄进程
		close(pipefd[0]);//关闭管道的读端
		dup2(pipefd[1],1);//将标准输出重定向到管道的写端
		execlp("ls","ls","-l",NULL);//执行ls -l 
	}
	if(i == 1){//弟进程
		close(pipefd[1]);//关闭管道的读端
		dup2(pipefd[0],0);//将标准输入重定向到管道的读端
		execlp("wc","wc","-l",NULL);
	}
	if(i == 2){
		close(pipefd[0]);
		close(pipefd[1]);
		int w1,w2;
		w1 = wait(NULL);//回收线程
		w2 = wait(NULL);//回收线程
		printf("%d\n",w1);
		printf("%d\n",w2);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值