我有一个包含两个单独部分的程序:当网络接口(interface)是无线LAN时应执行其中的一个,而在有线LAN连接时应执行另一个。我怎么能在程序中知道这一点?我应该使用什么功能来获取该信息?
最佳答案
您可以从命令行使用iwconfig命令:
$ iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
如果需要从C使用它,如上面@opaque的链接所述,请获取源代码或使用strace来查看需要使用的ioctls():
ioctl(3, SIOCGIWNAME, 0x7fff82c0d040) = -1 EOPNOTSUPP (Operation not supported)
ioctl(3, SIOCGIFFLAGS, {ifr_name="lo", ifr_flags=IFF_UP|IFF_LOOPBACK|IFF_RUNNING}) = 0
write(2, "lo no wireless extensions"..., 35lo no wireless extensions.
) = 35
ioctl(3, SIOCGIWNAME, 0x7fff82c0d040) = -1 EOPNOTSUPP (Operation not supported)
ioctl(3, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
write(2, "eth0 no wireless extensions"..., 35eth0 no wireless extensions.
) = 35
参见SIOCGIWNAME usage:
#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
* Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
关于c - 确定网络接口(interface)是无线还是有线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12566911/