
Ubuntu日本語フォーラム

ログインしていません。
C++で開発してますが、
システムのMACアドレスなどを取得するにはどうすれば良いでしょうか?
よろしく、お願いいたします。
オフライン
ifconfig コマンドを外部呼び出しして、標準出力に返される文字列から抽出するのは無しですか?
オフライン
コマンドの出力内容から持ってくるのが、おそらく、1番簡単な方法になるかと思います。
この方法の利点は、「情報が取れた/取れなかった」の切り分けや確認が比較的簡単なためです。
注意点は、LANGを自身で指定し表示内容の変化を抑止すること(LANG=Cがお勧め。)と、標準出力/標準エラー出力の区別ぐらいでしょうか。
# あと、利用するコマンドに対して、表示の際に実行権限が足りて無いと駄目ですね。
あとは、/sysだか/procだかに情報が有るのであれば、これを利用するのが良いかと思います(sysfsでしたっけ・・・?)大半の情報はここでそろうような気がしています。
肝心な、libやデバイスを直接成業する方法はわかりません(socket.hかな?)。もし、上記のような方法ではなく、どうしてもライブラリ/APIから取得する必要がある場合、私なら、最初の案のコマンドのソースを覗いています。利用しているライブラリや関数(か使用しているヘッダファイル)まで判れば、あとは芋づる式に調べれば何とか成るかな と。
オフライン
sysfsの/sys/class/net/*/addressがお望みのものかと思います。
アプローチとしては、
・このファイル群を必要に応じてなめる
・10.04のUpstartに含まれる/sbin/upstart-udev-bridgeのようなものを作って、udev経由で情報を受け取る
のどちらかです。前者は静的にしか取れませんが実装が簡単ですし、後者の場合は動的に(ただし起動タイミングなどは検討する必要がある)取得でき、デバイスの挿抜にも応答可能です。
オフライン
ioctlを使用して取得するのはどうでしょうか。知っておくと色々できますよ。
http://www.geekpage.jp/en/programming/linux-network/get-macaddr.php
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/netdevice.7.html
オフライン
みなさま、ご指導ありがとうございました。
静的な情報で十分なので、
sys/class/net/eth0/addressの情報を読み込む方式で、考えて見ます。
ありがとう、ございました。
オフライン