【问题标题】:Why can't I access uname struct's domainname member even if I defined _GNU_SOURCE为什么即使我定义了 _GNU_SOURCE 也不能访问 uname 结构的域名成员
【发布时间】:2020-04-02 09:59:59
【问题描述】:

我正在尝试通过调用 uname 系统调用来获取 Linux 内核版本信息,但是我收到了一个编译器错误提示 ‘struct utsname’ has no member named ‘domainname’

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>

#define _GNU_SOURCE

int main(void) {

   struct utsname buffer;

   errno = 0;
   if (uname(&buffer) != 0) {
      perror("uname");
      exit(EXIT_FAILURE);
   }

   printf("system name = %s\n", buffer.sysname);
   printf("node name   = %s\n", buffer.nodename);
   printf("release     = %s\n", buffer.release);
   printf("version     = %s\n", buffer.version);
   printf("machine     = %s\n", buffer.machine);

   #ifdef _GNU_SOURCE
      printf("domain name = %s\n", buffer.domainname);
   #endif

   return EXIT_SUCCESS;
}

根据https://linux.die.net/man/2/uname struct utsname 是

struct utsname {
    char sysname[];    /* Operating system name (e.g., "Linux") */
    char nodename[];   /* Name within "some implementation-defined
                          network" */
    char release[];    /* Operating system release (e.g., "2.6.28") */
    char version[];    /* Operating system version */
    char machine[];    /* Hardware identifier */
#ifdef _GNU_SOURCE
    char domainname[]; /* NIS or YP domain name */
#endif
};

我不确定我在这里错过了什么

【问题讨论】:

  • 预处理器的工作在处理代码时是一种严格的自上而下的方式,这意味着顺序很重要。如果您在定义宏之前#include 一个头文件,那么将不会为包含的头文件定义宏。
  • 除了@SPD,您还可以编译启用宏:gcc -D_GNU_SOURCE=1 test.c -o test.exe。您可能还可以获得使用gcc -std=gnu99 test.c -o test.exe 定义的宏。另请参阅 _GNU_SOURCE and __USE_GNUShould I still define _GNU_SOURCE when I compile with -std=gnu99? 等问题

标签: c linux macros


【解决方案1】:

来自man feature_test_macros

注意:为了有效,必须定义功能测试宏 在包含任何头文件之前

是:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2013-04-22
    • 2010-10-08
    • 2010-12-09
    相关资源
    最近更新 更多