パスワードを忘れた? アカウント作成
17791 journal

Silphireの日記: LinuxでEthernetの接続状態を調べる

日記 by Silphire

LinuxでEthernetの接続状態を調べる

一言で言うと、ethtool <if>の最下行に書かれている。
無線環境の接続状態の判定はどうやるんだろ。

ちなみにプログラム的には、適当にソケットを開いて、IOCTLでSIOCETHTOOLを投げればよい。struct ethtool_valueな変数へのポインタをstruct ifreqのifr_dataメンバに入れて、ioctl()の第3パラメータに渡すと、struct ethtool_valueのdataメンバに、Ethernetケーブルの接続状態が入る。

日本語よりもコードで書いた方が後で理解し易そうなので、コードでも書いておく。

int sk;
struct ethtool_value ev;
struct ifreq ir;
 
ev.cmd = ETHTOOL_GLINK;
ir.ifr_data = &ev;
strncpy(ir.ifr_name, "eth0", IFNAMSIZ);
 
int sk = socket(PF_INET, SOCK_DGRAM, &ir);
ioctl(sk, SIOCETHTOOL, &ir);
close(sk);
 
puts(ev.data ? "connected" : "disconnected");

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...