|
发表于 2004-11-29 11:45:09
|
显示全部楼层
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- void extract(char *src,char *dest1,char *dest2)
- {
- while( *src != ' ' )
- *(dest1++) = *(src++);
- *dest1 = '\0';
- src++;
- while( *src != '\0')
- *(dest2++) = *(src++);
- *dest2 = '\0';
- }
- int main(int argc,char *argv[])
- {
- pid_t pid;
- int fd[2];
- pipe(fd);
- pid=fork();
- if(pid < 0)
- printf("Can not fork!");
- else if(pid > 0)
- {
- printf("In parent process.\n");
- char exec[10],param[100];
- extract(argv[1],exec,param);
- if(fd[1] != STDOUT_FILENO)
- if(dup2(fd[1],STDOUT_FILENO)==-1)
- printf("Dup failed!\n");
- close(fd[0]);
- execlp(exec,exec,param);
- wait(NULL);
- }
- else
- {
- printf("In child process.\n");
- char exec[10],param[100];
- extract(argv[2],exec,param);
- if(fd[0] != STDIN_FILENO)
- dup2(fd[0],STDIN_FILENO);
- close(fd[1]);
- execlp(exec,exec,param);
- }
- }
复制代码
程序运行例子:
[root@Trainer ~]# ./pipe "cat /etc/passwd" "grep root"
In parent process.
In child process.
root:x:0:0:root:/root:/bin/bash
operator:x:11:0 perator:/root:/sbin/nologin |
|