GNU/Linuxのsysfsを使用した版。
#include <iostream> #include <fstream> #include <string> int main() { std::ifstream stream( "/sys/class/net/eth0/address", std::ios::in ) ; if ( !stream ) { std::cout << "failed to open /sys/class/net/eth0/address" << std::endl ; } std::string mac_address ; stream >> mac_address ; std::cout << mac_address << std::endl ; }
GNU/Linuxだとsysfsの/sys/class/net/eth0/addressを読み込むのが一般的なんですかね。
リファレンス元:C++ で物理アドレスの取得 - C++でゲームプログラミング
一応、getifaddrsを使うのがsysfsには頼らない方法だ。というより、manページにそのままズバリのサンプルコードが載っている。
getifaddrs(3) - Linux manual page
というより、なんでWIndowsはgetifaddrsじゃなくてGetAdaptersAddressesなんだろう。
getifaddrsで取得しているのはIPアドレスに見えますが、MACアドレスを取得するのはioctl (SIOCGIFHWADDR) ではないでしょうか:
ReplyDeletehttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/netdevice.7.html
http://www.geekpage.jp/programming/linux-network/get-macaddr.php