LINUX:帶輸出參數的system函數

來源:互聯網
上載者:User
    在Linux編程中,經常要調用一些系統命令或SHELL指令碼來協助我們完成一些操作,大部分情況下system函數可以勝任,但有時在操作完成之後,我們還要擷取它的輸出,這時system函數就無能為力了。為此我編寫了一個函數,可以先讓系統執行一條命令,然後利用管道技術擷取它的輸出。上代碼:
#include <sys/types.h>   #include <unistd.h>   #include <stdlib.h>   #include <stdio.h>   #include <string.h>  #define MAXLINE 1024  //調用系統命令,並擷取輸出(相當於使用system)  //input: 要調用的系統命令  //output: 調用命令後系統的輸出  //maxlen: 輸出字串的最大長度  int mysystem(char *input, char *output, int maxlen)  {  if( NULL==input || NULL==output )  return -1;  int reslen;  FILE *stream;  memset(output, 0, maxlen);  //建立管道,並將input裡的內容寫入管道  stream = popen(input, "r");  //從管理中讀出資料,並寫入output數組  reslen = fread(output, sizeof(char), maxlen, stream);  pclose(stream);return reslen;  }  int main(int argc, char **argv)  {  if( argc != 2 ){fprintf(stderr, "Using: ./mysystem <cmd>\n");exit(1);}char output[MAXLINE];  mysystem(argv[1], output, MAXLINE);  printf("The result of '%s' is: \n%s", argv[1], output);  return 0;  }  

運行樣本:qch@ubuntu:~/code$ gcc temp.c -o temp
qch@ubuntu:~/code$ ./temp pwd
The result of 'pwd' is: 
/home/qch/code

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.