這裏我使用無名管道
知識點:
1. 管道pipe
2. 創建子進程fork
3. 重定向dup2
4. exec函數族execlp
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
/**
* 功能:使用管道實現ls -l | wc -w,顯示單詞數量
* @author AWEEN
* @create on 2018-06-03
*/
int main(void){
int fd[2];
//新建無名管道
int ret = pipe(fd);
if(ret < 0){
perror("管道創建失敗");
exit(1);
}
//創建子進程
pid_t pid = fork();
if(pid < 0){
perror("子進程創建失敗 ");
exit(1);
}
//子進程用於寫操作
if(pid == 0){
//關閉讀端
close(fd[0]);
//將標準輸出重定向到寫管道
dup2(fd[1],1);
if((execlp("ls","ls","-l",NULL)) < 0){
perror("execlp失敗");
exit(1);
}
exit(1);
}
//主進程用於讀操作
if(pid > 0){
//關閉寫端
close(fd[1]);
//將標準輸入重定向到讀管道
dup2(fd[0],0);
if(execlp("wc","wc","-w",NULL) < 0){
perror("execlp失敗");
exit(1);
}
exit(1);
}
return 0;
}