Silphireの日記: LinuxでEthernetの接続状態を調べる
日記 by
Silphire
一言で言うと、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");
LinuxでEthernetの接続状態を調べる More ログイン