2015年4月15日 星期三

linux的環境下,在C程式裡popen的用法&取得ip位置的範例

記得以前有寫過network setting的頁面,其中必須取得現在環境中的IP值。

記得還是菜逼八的時候,是用system call去呼叫事先寫好的script,這支script作了ifconfig之後搭配sed或是awk篩選出 IP值之後再用 echo 輸出到某個檔案。

而最後要取IP值時,再想辦法從檔案中拿出來...




其實根本不用作的這麼複雜,使用popen()來作,還可以直接把取到的值放入變數中。
有關popen的功能以及原型,如下所示:

FILE *popen(const char *command, const char *type);

簡單的說就是popen會把command這個字串使用shell的方式去執行,接著輸出到C的程序裡。




下面的範例,就是一個可以取得IP位址的範例:
//============== get_ip.c ================
#include <stdio.h>
#include <string.h>

#define MY_IP_LENTH 32

int main()
{
     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);

    //記得作pclose()的動作
    if(fpRead != NULL)
pclose(fpRead);
 
    //最後檢查取出的字串當中是否有多餘的換行,若有直接取代為'\0'作結尾
    renewCh=strstr(MyIpBuf,"\n");
    if(renewCh)
*renewCh= '\0';

    printf("=== %s ===\n", MyIpBuf);

    return 0;
}


輸出結果:


沒有留言:

張貼留言