[问题]关于PIPE的实现!

软件和网站开发以及相关技术探讨
回复
newmachine
帖子: 1
注册时间: 2007-03-25 21:41

[问题]关于PIPE的实现!

#1

帖子 newmachine » 2007-03-25 21:49

要求自己编写一个shell,实现如同PIPE的功能。
例如:ls | sort
我的想法是调用PIPE()函数,ls和sort都用execvp()来调用系统方法,但是LS运行的结果要怎么传到sort去呢?
头像
longxj
帖子: 215
注册时间: 2006-10-07 15:17

#2

帖子 longxj » 2007-03-30 20:09

我给各程序给你参考吧:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(){
int fd[2];
pid_t fork_result;


//创建管道
if(pipe(fd)==0){
//创建子进程
fork_result=fork();
//如果创建失败
if(fork_result==(pid_t)-1){
fprintf(stderr,"fork fail");
exit(EXIT_FAILURE);
}

if(fork_result==0){
//子进程把标准输出输入到管道中
close(fd[0]);
if (fd[1] != STDOUT_FILENO) {
if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)printf("%s\n","dup2 error to stdout");
}

execlp("pstree","pstree",NULL);
}else{
//父进程从管道中读出数据
close(fd[1]);
if (fd[0] != STDIN_FILENO) {
if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO)printf("%s\n","dup2 error to stdin");
}

execlp("more","more",NULL);
}
}

return (0);

}
回复