日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模拟实现ps aux | grep xxx

發布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟实现ps aux | grep xxx 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模擬實現ps aux | grep xxx使用管道通信的功能

思路:子進程中執行ps aux,通過匿名管道通信傳輸給父進程,父進程中輸出內容即可
整體代碼:
pipe1.c:

#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc,char *argv[] ){//創建一個匿名管道 pipeint pipefd[2];int ret= pipe(pipefd);if(ret==-1){perror("pipe:");exit(-1);}//創建一個子進程 forkpid_t pid =fork();if(pid==0){//child process ps auxclose(pipefd[0]);//stdout_fileno -> pipeint rett= dup2(pipefd[1],STDOUT_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}//open ps aux and write pipe rett =execlp( "/bin/ps", "ps", "aux", NULL);if(rett == -1){perror("execl:");exit(-1);}close(pipefd[1]);}else if(pid > 0){//parent process read pipeclose(pipefd[1]);int rett= dup2(pipefd[0],STDIN_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}rett =execlp("grep", "grep", argv[1] ,NULL);if(rett == -1){perror("execl:");exit(-1);}close(pipefd[0]);}else{perror("fork:");exit(-1);}return 0; }

作業說明:
編譯指令:gcc pipe1.c
運行指令:./a.out XXX (XXX不可少)
XXX可以是bash nginx等等
例如:

下面記錄一下我遇到的問題:
1.管道的重定向,根據老師的提醒,我將子進程的[標準屏幕輸出(寫到屏幕上)STDOUT_FILEON] 指向[pipepf[1](寫到管道里)],如圖:

int rett= dup2(pipefd[1],STDOUT_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}

但父進程依然按照老師的示例read以及printf,發現read:bad read報錯終止,如下:

while (1){char buf[1024]={0};int retp= read(pipefd[0],buf,strlen(buf)-1);if(retp ==-1){perror("read:");exit(-1);}printf("%s",buf);}


后來想到將[標準讀入(從鍵盤讀入)]指向[從管道讀入],問題方才解決,即:

int rett= dup2(pipefd[0],STDIN_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}

2.子進程中執行ps aux,通過匿名管道通信傳輸給父進程,父進程中執行grep XXX,且輸出內容,或者父進程生成兩個子進程一個子進程執行ps aux,另一個子進程執行grep XXX,父進程可以回收子進程,這個已有其他的朋友寫過,可參考,下面放鏈接:https://blog.csdn.net/zxy131072/article/details/89515930

總結

以上是生活随笔為你收集整理的模拟实现ps aux | grep xxx的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。