我有一个程序有两个独立的部分:其中一个应该在networking接口是无线LAN时执行,另一个是有线LAN连接。 我怎么知道我的程序里面? 我应该使用什么函数来获取这些信息?
查询服务是否正在运行
.text段地址范围的位置独立可执行文件
C + + Qt WriteProcessMemory
这是确定操作系统架构的好方法吗?
使用GraphicsMagick调整animationGIF的大小
您可以使用命令行中的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,{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
#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"...
如果您的设备名称是NETDEVICE ,则检查/sys/class/net/NETDEVICE/wireless目录的存在是您可以使用的谓词。 不过,这是一种仅限于Linux的方法,并且假设/sys已挂载,这几乎总是正常情况。 从脚本中使用这种方法也比较容易,而不是处理ioctl()。
现在可以从C得到它。
查看这个链接了解类似问题的信息。
您可以调用返回无线扩展协议版本的ioctl(fd,SIocgIWNAME) ,该版本仅在无线接口上可用。
int check_wireless(const char* ifname,char* protocol) { int sock = -1; struct iwreq pwrq; memset(&pwrq,sizeof(pwrq)); strncpy(pwrq.ifr_name,ifname,IFNAMSIZ); if ((sock = socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket"); return 0; } if (ioctl(sock,&pwrq) != -1) { if (protocol) strncpy(protocol,pwrq.u.name,IFNAMSIZ); close(sock); return 1; } close(sock); return 0; }
有关完整的示例,请参阅: https : //gist.github.com/edufelipe/6108057
如果您的目标是NetworkManager,请查看其API, C示例和NMDeviceType 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。