- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有一个应用程序使用 popen(nmcli...) 获取 essid 和信号强度,我正尝试使用 wireless.h 和 ioctl 切换到纯 C。获取 ESSID 很容易,但是尝试通过 SIOCGIWSTATS 获取强度/质量总是给我一个“不支持的操作”错误。任何人都可以发现我做错了什么,或者可能只是我的无线驱动程序实际上不支持 SIOCGIWSTATS?
请忽略全局变量的使用,它只是我调试当前问题时的临时变量。
谢谢,
海顿。
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <ifaddrs.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/wireless.h>
#include <stdlib.h>
#include <errno.h>
char ifname[IFNAMSIZ];
char essid[IW_ESSID_MAX_SIZE+1];
struct iwreq wrq;
struct iw_statistics *iwstats;
int sock;
int findWifi() {
struct ifaddrs *ifaddr, *ifa;
if (getifaddrs(&ifaddr) == -1) {
perror("Error getting interface addresses");
return -1;
}
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
strncpy(wrq.ifr_name, ifa->ifa_name, IFNAMSIZ);
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("Error opening INET socket");
}
if (ioctl(sock, SIOCGIWNAME, &wrq) == 0) {
printf("IF: %s\n", wrq.ifr_name);
strcpy(ifname, wrq.ifr_name);
freeifaddrs(ifaddr);
return sock;
}
}
freeifaddrs(ifaddr);
return 0;
}
int wifiInfo() {
wrq.u.essid.pointer = essid;
if (ioctl(sock, SIOCGIWESSID, &wrq) == -1) {
perror("Can't open socket to obtain essid");
return(-1);
}
printf("ESSID is %s\n", wrq.u.essid.pointer);
memset(&iwstats, 0, sizeof(iwstats));
wrq.u.data.pointer = (caddr_t) &iwstats;
wrq.u.data.length = sizeof(&iwstats);
wrq.u.data.flags = 1;
// ERROR HERE...
if (ioctl(sock, SIOCGIWSTATS, &wrq) == -1) {
perror("Can't open socket to obtain iwstats");
return(-1);
}
return(0);
}
int main(int argc, char const *argv[]) {
findWifi();
wifiInfo();
return 0;
}
最佳答案
Can anyone spot what I've done wrong, or maybe it's just my wireless driver that doesn't actually support SIOCGIWSTATS?
您的代码看起来不错或至少非常接近,尽管这一行需要仔细检查:
wrq.u.data.pointer = (caddr_t) &iwstats;
这不会在 Ubuntu 16.04 上编译,因为 caddr_t
未声明。即使在添加 <linux/types.h> and <sys/types.h>
之后也会发生这种情况.
谷歌搜索似乎表明这个 caddr_t
是特定于 BSD 的,建议您不要使用它:
What is the significance of caddr_t and when is it used?
对于问题的第二部分,您可以检查 Wifi 驱动程序是否真的支持 SIOCGIWSTATS
通过使用 iwconfig
等常用工具.
关于c - 使用 wireless.h 的 C 语言中的无线 ESSID 和信号强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59087739/
我正在开发一个录音机应用程序。我想知道在录制音频时有什么方法可以找到音频的强度。我不想将录音保存在任何地方。我只想向用户展示麦克风捕捉到的声音是否大于预定义的阈值。 假设如果声音低于 2 分贝,它应该
我正在尝试让一个基本服务器(从 Beginning Python 复制)来发送一个 str。 错误: c.send( "XXX" ) TypeError: must be bytes or buffe
我陷入了一个问题,不知道去哪里看。我需要增加图像中特定颜色的强度,例如 R、G 或蓝色。当我这样做时,某些颜色无法正确呈现。 下面是我为测试拍摄的图像: 现在当我像绿色一样增加时: A = Color
我不希望我的背景图片太模糊。没有调整模糊强度的属性吗? let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) blurEffect
我使用 OpenCV 2.4.11+Qt 并尝试制作视频并更改红色/蓝色或绿色 channel 的强度,但没有找到任何功能或设置来执行此操作。有谁知道如何做到这一点? 最佳答案 如果您只想更改一个特定
当我有 x、y、强度时,我不知道如何创建热图(或等高线图)。我有一个看起来像这样的文件: 0,1,6 0,2,10 .... 到目前为止: with open('eye_.txt', 'r') as
有谁有一些可以在 iPhone 应用程序中使用的代码,让我可以看到 wifi 的强度吗?我有一个连接密集型操作,并且希望它们不在不稳定区域 最佳答案 这可能会帮助您走上正确的道路...... http
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
Eclipse SSH key 生成屏幕(常规 -> 网络连接 -> SSH2)生成 1024 位 RSA key ,该 key 太弱而无法使用 ( http://news.netcraft.com/
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
我们的网络应用程序使用 the Vibrate API对于微妙的按钮按下效果: window.navigator.vibrate(5); 但在我的新手机上,感觉不那么微妙,更像是我的手机正试图从我手中
我的应用程序应扫描周围的 Wifi 信号并列出网络名称及其 RSSI。 我在谷歌上找不到任何关于如何做的线索。有人可以举个例子或者至少指出其他地方我可以找到答案吗? 最佳答案 我认为这不可能!不管是
所以我的图像有一些黑点,它们看起来很简单,所以我想我可以创建一个亮度图,将其反转,然后将其应用到我的图像以消除黑点。然而,我所能找到的只有两种均衡方法:均衡整个图像(使用直方图)或将图像分割成深色和浅
我是一名优秀的程序员,十分优秀!