最近專案中需要讀取本地網口的ip位址,然後在網上搜尋了一下相關的內容。發現網上一些方法不夠嚴謹,在實際應用時出現了一些問題。下面是我結合網上例子修改後的**,比較簡單。有什麼問題還望指出。
static int get_ip(const char *inf_name,char *ip)
struct ifaddrs *ifc,*ifc_header;
if(getifaddrs(&ifc)<0)
ifc_header = ifc;
while (ifc != null)
}ifc=ifc->ifa_next;
} freeifaddrs(ifc_header);
dprint("%s not found\n",inf_name);
return -1;
}
需要注意的地方:1、為什麼定義了ifc和ifc_header?
看一下man中的說明,getifaddrs函式用於建立乙個網路介面位址的鍊錶,並儲存這個鍊錶的頭指標,通過遍歷網路介面位址鍊錶來找到你要獲取ip的那個網口。如果定義乙個ifaddrs位址型別,在遍歷的時候一直在變。那麼freeifaddrs()釋放此位址的時候就會有問題,可能造成記憶體洩漏或操作野指標的情況。所以定義了兩個,乙個用於儲存鍊錶的header,用於釋放鍊錶。
can也是用的socket介面在遍歷時同樣會遍歷到can介面,但是**can介面是沒有ip位址的。故相應的ifc->ifa_addr為null。如果此時再去操作ifc->ifa_addr即出現操作空指標的情況,會導致segmentation fault。**當然這種情況只會出現在裝置中有socket can介面的時候。剛開始時沒有考慮到這種情況,在電腦上執行的時候一切正常,放在我裝置執行的時候一直都報錯,百思不得其解。後來經過大神指點才恍然大悟。遍歷到指定的介面後取出ip位址,否則列印錯誤資訊。
電腦本地網口共享無線網口的網路
電腦本地網口共享無線網口的網路 先把問題丟擲來,當時手上有一台台式電腦有2個本地網絡卡1個無線網絡卡,通過無線網絡卡連著wifi上網使用。另有一台linux主機帶2個本地網絡卡,卻沒有無線網絡卡,通過網線接連電腦和linux主機可以ssh遠端登入操作,但是要知道沒有聯網的linux主機幾乎就是個廢物...
設定本地網絡卡IP位址的批處理
這是乙個很好用的批處理命令集,可以設定自動獲得,可以手動設定,可以預先設定好後儲存。方案1 set a num 1 set project num 測試網路 set nname lan num 本地連線 set addr lan num 192.168.0.142 set mask lan num ...
linux 下獲取本地IP位址
include include include include include include include include include include include include include include int main int argc,char argv int getloc...