2013-02-22 61 views
2

我在編寫一個顯示命令提示符(這裏沒有問題)的C程序時遇到了麻煩,它允許用戶輸入unix命令&然後顯示結果。我嘗試了很多東西,但是我只在一年前開始編程,並且除了顯示命令提示符外沒有任何其他地方出現;我需要關於如何接受unix命令+顯示結果的幫助。命令提示符程序:如何讓用戶輸入unix命令?

我唯一的約束是不是用戶提供絕對路徑,我需要我的程序來搜索路徑環境變量中指定的目錄,並查找命令可執行文件的位置。我不明白如何做到這一點,但網上搜索告訴我,這將是最好的使用「getenv()訪問OS PATH變量,並適當地爲用戶提供的命令前綴」。有人可以幫我從這裏出去嗎?感謝您提前給予的幫助。

+1

我想你正在尋找'popen':http://linux.die.net/man/3/popen – Jack 2013-02-22 18:00:02

回答

2

嘗試popen(),在手冊頁中可以找到here

檢查了這一點:

#include <stdio.h> 
#include <stdlib.h> 

void write_netstat(FILE * stream) 
{ 
      FILE * outfile; 
      outfile = fopen("output.txt","w"); 
      char line[128]; 

      if(!ferror(stream)) 
      { 
        while(fgets(line, sizeof(line), stream) != NULL) 
        { 
           fputs(line, outfile); 
           printf("%s", line); 
        } 
        fclose(outfile); 
      } 
      else 
      { 
        fprintf(stderr, "Output to stream failed.n"); 
        exit(EXIT_FAILURE); 
      } 
} 

int main(void) 
{ 
      FILE * output; 
      output = popen("netstat", "r"); 

      if(!output) 
      { 
        fprintf(stderr, "incorrect params or too many files.n"); 
        return EXIT_FAILURE; 
      } 

      write_netstat(output); 

      if(pclose(output) != 0) 
      { 
        fprintf(stderr, "Could not run 'netstat' or other error.n"); 
      } 
      return EXIT_SUCCESS; 
} 

此打印netstat到一個文件中。您可以爲所有命令執行此操作。它使用popen()。我寫了它,因爲我需要一個netstat的日誌。

+0

謝謝!我結束了使用popen – user2100364 2013-03-05 17:41:18

+0

沒問題。很高興我能幫上忙! – 2013-03-05 18:55:16