使用管道實現:ls -l | wc -w命令

這裏我使用無名管道
知識點:

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;
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章