Wenn Ihr Gerätename NETDEVICE
ist , eine Überprüfung der Existenz von /sys/class/net/NETDEVICE/wireless
Verzeichnis ist ein Prädikat, das Sie verwenden können. Dies ist jedoch ein reiner Linux-Ansatz und geht davon aus, dass /sys
montiert ist, was fast immer der Normalfall ist. Es ist auch einfacher, diese Methode aus Skripten heraus einzusetzen, anstatt sich mit ioctl()s herumzuschlagen.
Sie können ioctl(fd, SIOCGIWNAME)
anrufen die die Version des drahtlosen Erweiterungsprotokolls zurückgibt, die nur auf drahtlosen Schnittstellen verfügbar ist.
int check_wireless(const char* ifname, char* protocol) {
int sock = -1;
struct iwreq pwrq;
memset(&pwrq, 0, sizeof(pwrq));
strncpy(pwrq.ifr_name, ifname, IFNAMSIZ);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
return 0;
}
if (ioctl(sock, SIOCGIWNAME, &pwrq) != -1) {
if (protocol) strncpy(protocol, pwrq.u.name, IFNAMSIZ);
close(sock);
return 1;
}
close(sock);
return 0;
}
Ein vollständiges Beispiel finden Sie unter:https://gist.github.com/edufelipe/6108057
Sie können den Befehl iwconfig von der Befehlszeile aus verwenden:
$ iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
Wenn Sie es von C aus verwenden müssen, wie der Link von @opaque oben erklärt, holen Sie sich die Quellen oder verwenden Sie strace, um zu sehen, welches ioctls() Sie verwenden müssen:
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
Siehe Verwendung von SIOCGIWNAME:
#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"...