2010-03-04 70 views
4

我試圖做一個自定義的方法是什麼原因返回一個字符與系統輸出。C編程linux,讀取系統輸入如ping或ls -l

這樣的僞代碼。

char *my_Out(char *in){ 
    in = system ("ping %s",in); 
    return in; 
} 

感謝您的幫助。

+3

如果你包含''(它聲明'system()'),你就會知道它返回一個整數而不是'char *'。 – 2010-03-04 03:00:21

回答

5

您可以使用popen,它會返回一個可讀取輸出的流。通過閱讀直到文件結束,轉換成一個字符串(可能是一個動態增長的字符串),你可以實現你所要求的。

+2

儘管如果你正在尋找'ls -l'中包含的信息之一,那麼你可以用一個庫函數('stat')更容易地獲得它。 – Cascabel 2010-03-04 01:31:33

+0

@Jefromi:+1爲了您的洞察力,儘管一個小的nit:'stat'通常是一個系統調用,而不是一個庫函數。 :-P – 2010-03-04 01:32:19

+3

Chris:'stat'通常是一個庫函數*包裝*一個系統調用(他是誰的生命... ...) – caf 2010-03-04 02:13:41

2

有幾件事情

  1. system()不是一個printf風格的函數。您需要先使用sprintf()來創建您的參數。
  2. system()的返回值是一個int,非char
  3. 覆蓋函數參數通常不是一個好主意。

你想做什麼?它看起來像所有這個功能是運行ping(沒有-c參數,將永遠不會在linux上完成運行)。

+1

我不同意第3點。雖然它可能很不尋常,並且打破了你的風格,但它沒有任何問題。 – 2010-03-04 01:39:43

1
Duplicate the stdout to some other file descriptor by using dup2.After the execution of the command read all the lines from the file using that file descriptor and return it.