要求自己编写一个shell,实现如同PIPE的功能。
例如:ls | sort
我的想法是调用PIPE()函数,ls和sort都用execvp()来调用系统方法,但是LS运行的结果要怎么传到sort去呢?
[问题]关于PIPE的实现!
-
- 帖子: 1
- 注册时间: 2007-03-25 21:41
- longxj
- 帖子: 215
- 注册时间: 2006-10-07 15:17
我给各程序给你参考吧:
#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);
}
#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);
}