利用pipe()与dup()编写代码,将ps-ef命令的标准输出作为标准输出连接到wc-l命令

1.dup2的作用是用来复制一个文件的描述符,经常用来重定向进程的stdin、stdout和stderr。
dup2函数成功返回时,目标描述符(dup2函数的第二个参数)将变成源描述符(dup2函数的第一个参数)的复制品,换句话说,
两个文件描述符现在都指向同一个文件,并且是函数第一个参数指向的文件。
2.建立一个管道,然后将应用程序分成两个进程:一个子进程和一个父进程。接下来,在子进程中首先关闭文件描述符,然后用execlp函数把子进程的映像替换为命令ps -ef的进程映像。
3.在父进程中使用dup2 函数重定向到管道,关掉管道的输入端。然后,使用execlp函数把父进程的
映像替换为命令wc-l的进程映像。

#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<error.h>
#include<string.h>
#include<signal.h>
#include<stdlib.h>
int main(){
	int fd[2];
	if(pipe(fd)==-1){//父进程创建管道
		exit(1);	//创建失败退出
	}
	pid_t pid;
	pid=fork();//创建子进程
	if(pid==-1){
		exit(1);//创建子进程失败退出
	}
	if(pid==0){
		close(fd[0]);//关闭文件描述符(读)
		/*STDOUT_FILENO:向屏幕输出*/
		dup2(fd[1],STDOUT_FILENO);//子进程输出重定向,向管道输写
		execlp("ps","ps","-ef" ,NULL);
		exit(0);
	}
close( fd[1]);//关闭文件描述符(写)
/*STDIN_FILENO:接收键盘的输入*/
dup2(fd[0],STDIN_FILENO); //父进程输出重定向,从管道读
execlp( "wc", "wc", "-l", NULL ); //把父进程的映像替换为命令wc -1的进程映像
return 0;
}

ps -ef是内容输出到终端,wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

下面使用父子进程完成:
子进程用来执行ps -ef命令,使用dup2函数输出重定向,向管道输出,关闭读文件描述符。
父进程执行wc -l命令,使用dup2函数输入重定向,从管道输入,关闭写文件描述符。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值