記得以前有寫過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;
}
輸出結果:
沒有留言:
張貼留言