Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
6 #include <linux/wireless.h>
7 #include <sys/socket.h>
10 #include <sys/ioctl.h>
16 wifi_perc(const char *iface
)
19 int total
= 70; /* the max of /proc/net/wireless */
25 snprintf(path
, sizeof(path
), "%s%s%s", "/sys/class/net/", iface
,
27 if (!(fp
= fopen(path
, "r"))) {
28 fprintf(stderr
, "fopen '%s': %s\n", path
,
32 p
= fgets(status
, 5, fp
);
34 if(!p
|| strcmp(status
, "up\n") != 0) {
38 if (!(fp
= fopen("/proc/net/wireless", "r"))) {
39 fprintf(stderr
, "fopen '/proc/net/wireless': %s\n",
44 for (i
= 0; i
< 3; i
++) {
45 if (!(p
= fgets(buf
, sizeof(buf
) - 1, fp
)))
53 if (!(datastart
= strstr(buf
, iface
))) {
57 datastart
= (datastart
+(strlen(iface
)+1));
58 sscanf(datastart
+ 1, " %*d %d %*d %*d\t\t %*d\t "
59 "%*d\t\t%*d\t\t %*d\t %*d\t\t %*d", &cur
);
61 return bprintf("%d", (int)((float)cur
/ total
* 100));
65 wifi_essid(const char *iface
)
67 static char id
[IW_ESSID_MAX_SIZE
+1];
68 int sockfd
= socket(AF_INET
, SOCK_DGRAM
, 0);
71 memset(&wreq
, 0, sizeof(struct iwreq
));
72 wreq
.u
.essid
.length
= IW_ESSID_MAX_SIZE
+1;
73 snprintf(wreq
.ifr_name
, sizeof(wreq
.ifr_name
), "%s", iface
);
76 fprintf(stderr
, "socket 'AF_INET': %s\n",
80 wreq
.u
.essid
.pointer
= id
;
81 if (ioctl(sockfd
,SIOCGIWESSID
, &wreq
) < 0) {
82 fprintf(stderr
, "ioctl 'SIOCGIWESSID': %s\n", strerror(errno
));
89 if (!strcmp(id
, "")) {
95 #elif defined(__OpenBSD__)