お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-04-23 12:28:35

taku_s
メンバ
登録日: 2008-12-14

システムのMACアドレスなどを取得するには

C++で開発してますが、
システムのMACアドレスなどを取得するにはどうすれば良いでしょうか?

よろしく、お願いいたします。

オフライン

 

#2 2010-04-23 12:44:32

ry
メンバ
登録日: 2008-07-30

Re: システムのMACアドレスなどを取得するには

ifconfig コマンドを外部呼び出しして、標準出力に返される文字列から抽出するのは無しですか?

オフライン

 

#3 2010-04-23 13:37:00

weyk
メンバ
登録日: 2009-04-03

Re: システムのMACアドレスなどを取得するには

コマンドの出力内容から持ってくるのが、おそらく、1番簡単な方法になるかと思います。
この方法の利点は、「情報が取れた/取れなかった」の切り分けや確認が比較的簡単なためです。
注意点は、LANGを自身で指定し表示内容の変化を抑止すること(LANG=Cがお勧め。)と、標準出力/標準エラー出力の区別ぐらいでしょうか。
# あと、利用するコマンドに対して、表示の際に実行権限が足りて無いと駄目ですね。

あとは、/sysだか/procだかに情報が有るのであれば、これを利用するのが良いかと思います(sysfsでしたっけ・・・?)大半の情報はここでそろうような気がしています。

肝心な、libやデバイスを直接成業する方法はわかりません(socket.hかな?)。もし、上記のような方法ではなく、どうしてもライブラリ/APIから取得する必要がある場合、私なら、最初の案のコマンドのソースを覗いています。利用しているライブラリや関数(か使用しているヘッダファイル)まで判れば、あとは芋づる式に調べれば何とか成るかな と。

オフライン

 

#4 2010-04-23 13:56:45

hito
管理者
登録日: 2007-03-18

Re: システムのMACアドレスなどを取得するには

sysfsの/sys/class/net/*/addressがお望みのものかと思います。

アプローチとしては、
 ・このファイル群を必要に応じてなめる
 ・10.04のUpstartに含まれる/sbin/upstart-udev-bridgeのようなものを作って、udev経由で情報を受け取る
のどちらかです。前者は静的にしか取れませんが実装が簡単ですし、後者の場合は動的に(ただし起動タイミングなどは検討する必要がある)取得でき、デバイスの挿抜にも応答可能です。

オフライン

 

#5 2010-04-23 18:09:33

kmz
メンバ
From: kyoto
登録日: 2009-08-13

Re: システムのMACアドレスなどを取得するには

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

オフライン

 

#6 2010-04-23 18:13:40

taku_s
メンバ
登録日: 2008-12-14

Re: システムのMACアドレスなどを取得するには

みなさま、ご指導ありがとうございました。

静的な情報で十分なので、
sys/class/net/eth0/addressの情報を読み込む方式で、考えて見ます。

ありがとう、ございました。

オフライン

 

Board footer

Powered by FluxBB