linux的C擷取shell執行返回的結果

來源:互聯網
上載者:User

linux下通過C執行命令的時候一半都是使用system()方法,但是該方法執行命令返回的值是-1或0,而有時候我們需要得到執行命令後的結果。可以使用管道實現

輸出到檔案流的函數是popen(),例如

FILE *isr;

isr = popen("ls -l","r"); ls -l命令的輸出通過管道讀取("r"參數)到isr

下面是示範例子,列出當前可用的loop裝置,(必須是root許可權才可以執行losetup -f)

#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <string.h>char* cmd_system(const char* command);int main(){    //char str[20]={"0"};
    char* result = cmd_system("losetup -f");
    //通過該方法可以將char*轉換為char數組 //strcpy(str,result); printf("The result:%s\n",result); return 0;}char* cmd_system(const char* command){ char* result = ""; FILE *fpRead; fpRead = popen(command, "r"); char buf[1024]; memset(buf,'\0',sizeof(buf)); while(fgets(buf,1024-1,fpRead)!=NULL) {
       result = buf; } if(fpRead!=NULL) pclose(fpRead); return result;}

執行結果:

The result:/dev/loop0

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.