熟悉Linux命令行的童鞋都知道,ifconfig命令可以列出當前機器所有網絡設備節點對應的IP地址,如下示例所示;


編輯
我們在實際的編程代碼中,也需要通過代碼來獲取本地的IP地址,那么有沒有辦法,直接在代碼中調用【ifconfig】命令行來獲取本地的IP地址呢?
答案肯定是有的,本文將給你正確的答案,請按下面的示例代碼:
#include
#include
int shell_cmd_excute(const char *cmd, char *result, int size)
{
int ret;
FILE *fp = NULL;
fp = popen(cmd, "r");
if (!fp) {
perror("popen error: ");
ret = -1;
goto exit_entry;
}
ret = fread(result, 1, size, fp);
if (ret <= 0) {
perror("fread error: ");
ret = -2;
goto exit_entry;
}
if (ret > 1 && ret < size && (result[ret-1] == '\r' || result[ret-1] == '\n')) {
result[ret-1] = '\0';
}
ret = 0;
exit_entry:
if (fp) {
fclose(fp);
}
return ret;
}
int get_local_ip_by_ifconfig(const char *interface, char *ip, int size)
{
int ret;
char cmd[128];
snprintf(cmd, sizeof(cmd), "ifconfig %s | sed -nr 's/.*inet (addr:)?(([0-9]*\\.){3}[0-9]*).*/\\2/p'", interface);
printf("shell cmd: %s\n", cmd);
ret = shell_cmd_excute(cmd, ip, size);
return ret;
}
int main(int argc, const char **argv)
{
int ret;
const char *interface;
char local_ip[128];
if (argc < 2) {
printf("Error param input !\n");
printf("Usage: %s [interface]\n", argv[0]);
printf("[interface]: network logic interface, like eth0/ppp0/wlan0/lo ...\n");
exit(-1);
}
interface = argv[1];
ret = get_local_ip_by_ifconfig(interface, local_ip, sizeof(local_ip));
if (!ret) {
printf("Get local ip OK, ip = %s\n", local_ip);
} else {
printf("Get local ip FAIL !\n");
}
return ret;
}
代碼編譯:
gcc -o ifconfig_ip ifconfig_ip.c
代碼運行測試:

因筆者的Linux環境只有eth0和lo這2個網絡設備節點,沒有wlan0、ppp0這兩個網絡設備節點,所以wlan0節點和ppp0這2個節點測試報錯了,而eth0和lo可以得到正確的IP地址,與文章開頭的ifconfig輸出是保持一致的。
以上測試代碼是筆者在平時工作中積累的代碼,可直接用于生產環境。使用過程,若發現問題,歡迎隨時交流討論,互相提高。謝謝。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Linux
+關注
關注
87文章
11423瀏覽量
212379 -
命令
+關注
關注
5文章
723瀏覽量
22635 -
網絡編程
+關注
關注
0文章
72瀏覽量
10447
發布評論請先 登錄
相關推薦
熱點推薦
NanoPi NEO - 使用命令行查看IP 地址和主機名 - 04
:? NanPi NEO已成功運行UbuntuCore系統,并且保證NEO能聯網。1).打開終端,輸入以下命令,即可查看NanoPi NEO 的IP 地址:#ifconfig eth0
發表于 05-06 13:50
Linux如何配置IP地址
ifconfig命令:查看與配置網絡狀態的命令// 查看當前計算機所有網卡的配置信息#ifconfig// 查看某網卡的配置信息,如eth0
發表于 07-15 07:25
ifconfig改變IP地址重啟后變成默認地址是為什么?
[td]A40i開發板,通過ifconfig改變的ip地址,重啟后就變成auto_config_network中默認的ip
發表于 01-13 06:31
linux查看物理接口的命令
顯示和配置網絡接口。它可以顯示當前系統上的所有網絡接口及其配置信息。以下是ifconfig命令的用法和輸出示例: ifconfig -a 這
linux更改ip步驟命令
inux是一種廣泛應用于服務器和嵌入式設備的操作系統,通過更改IP地址,可以對網絡進行重新配置和優化,以滿足不同的需求。在Linux中,可以使用不同的
評論