c - 我质疑即使 struct iwreq 没有​​ ifr_name 作为成员,该代码是如何编译的

标签 c linux wifi wireless

我使用 struct iwreq 编写了非常简单的代码。 另外,我预计这会是错误。 但它已编译并且可以运行。

我查看了 linux/wireless.h 里面有 struct iwreq 的定义。 并且 iwreq 不将 ifr_name 作为成员。

有人可以给我一个主意吗? 这是简单的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <linux/wireless.h>

int main(void)
{
   char *intf = "eth0";
   struct iwreq iwr;

   strncpy(iwr.ifr_name, intf, sizeof(iwr.ifr_name));

   printf("main : intf = %s, iwr.ifr_name = %s\n", intf, iwr.ifr_name);
   return 0;
}

最佳答案

wireless.h 包含 if.h,在 if.h 中您可以找到:

#define ifr_name    ifr_ifrn.ifrn_name  /* interface name   */

所以代码被翻译为:

strncpy(iwr.ifr_ifrn.ifrn_name, intf, sizeof(iwr.ifr_ifrn.ifrn_name));

关于c - 我质疑即使 struct iwreq 没有​​ ifr_name 作为成员,该代码是如何编译的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69589566/

相关文章:

linux - objdump 调整 gnu 实用程序中的 vma 偏移量

linux - ALSA 与 PulseAudio - 延迟问题

Android:如何获取当前设备的 WiFi-direct 名称

android - wifiManager.addNetwork 失败

network-protocols - Wifi 是否有任何形式的前向纠错?

c - 设置线程ID

c - 我正在尝试创建一个程序来使用 c 搜索和替换文本文件中的单词

linux - Chroot 与 Docker

c - 这个全加器实现是否正确?

c++ - GCC 和 g++ 是如何引导的?