2015年4月17日 星期五

用C寫cgi時 popen或system遇到取值是空的問題

今天在寫cgi網頁時,用了前幾天學到的popen取設備端ip值的方法,如下:

char MyIpBuf[ MY_IP_LENTH ]={0};
FILE *fpRead;

//使用shell command來取得ip值  
char* command=(char*)"ifconfig eth0|grep 'inet addr' |awk -F \":\" '{print $2}' |awk '{print $1}'";
char* renewCh;
 
fpRead = popen(command, "r");
fgets(MyIpBuf, MY_IP_LENTH , fpRead);


奇怪的是,在browser輸入這個cgi網址時,怎麼popen取到的MyIpBuf值是空的,


這個問題讓我找了好久,也嘗試用system先輸出到檔案的方式,值還是空

奇怪的是,如果編譯成可執行檔,直接在terminal執行都取的到我要的值,

但是只要是編譯成cgi透過Browser執行,就會是空


後來發現把ifconfig改成完整的路徑,如下面這樣就沒有問題了:

char* command=(char*)"/sbin/ifconfig eth0|grep 'inet addr' |awk -F \":\" '{print $2}' |awk '{print $1}'";

猜測應該是Browser執行shell時,PATH路徑沒有/sbin因此找不到ifconfig這個指令吧?!

2 則留言:

  1. Hello,
    我也遇到了類似的問題,爬了好久的文都沒有相關的解決方法。
    還好有看到這篇文給了一點方向,最後改了server username & group name就解決問題了。
    特別登入一下說聲感謝XD!

    回覆刪除
    回覆
    1. 很高興可以幫助到你~
      感謝你的回應! XD

      刪除