Linux系統上的popen()庫函數


popen可以是系統命令,也可以是自己寫的程序a.out。 假如a.out就是打印 “hello world“

在代碼中,想獲取什么,都可以通過popen獲取。

比如獲取ls的信息,

比如獲取自己寫的程序的內容:“hello world” 。

 

https://www.cnblogs.com/sylar5/p/6644870.html

 

在 c/c++ 程序中,可以使用 system()函數運行命令行命令,但是只能得到該命令行的 int 型返回值,並不能獲得顯示結果。例如system(“ls”)只能得到0或非0,如果要獲得ls的執行結果,則要通過管道來完成的。首先用popen打開一個命令行的管道,然后通過fgets獲得該管道傳輸的內容,也就是命令行運行的結果。

在linux上運行的例子如下:

  1. 復制代碼
    void executeCMD(const char *cmd, char *result) { char buf_ps[1024]; char ps[1024]={0}; FILE *ptr; strcpy(ps, cmd); if((ptr=popen(ps, "r"))!=NULL) { while(fgets(buf_ps, 1024, ptr)!=NULL) { strcat(result, buf_ps); if(strlen(result)>1024) break; } pclose(ptr); ptr = NULL; } else { printf("popen %s error\n", ps); } } 
    復制代碼

在這段代碼中,參數cmd為要執行的命令行,result為命令行運行結果。輸入的cmd命令最好用... 2>&1 的形式,這樣將標准錯誤也讀進來。

一個完整的例子是:

復制代碼
#include <stdlib.h>
#include <stdio.h> #include <unistd.h> int main() { FILE* fp = NULL; char cmd[512]; sprintf(cmd, "pwd 2>/dev/null; echo $?"); if ((fp = popen(cmd, "r")) != NULL) { fgets(cmd, sizeof(cmd), fp); pclose(fp); } //0 成功, 1 失敗 printf("cmd is %s\n", cmd); return 0; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM