我正在尝试在 ANSI C (Linux) 中以编程方式检索主机的本地域后缀。例如:我的机器是ironside.0ffnet.net,我想检索“0ffnet.net”。
我已经看到许多帖子通过使用 getnameinfo() 和 getaddrinfo() 来解决这个问题,但是这些函数似乎从 /etc/hosts 文件中提取它们的信息,以获取机器本地的任何接口地址。
如果我的机器通过 DHCP 分配了一个地址(和相应的域后缀),则 /etc/hosts 文件不会更新,而是将此信息存储在 /etc/resolv.conf 例如:
dfex@ironside:~/hush$cat /etc/resolv.conf
domain 0ffnet.net
search 0ffnet.net
nameserver 139.130.4.4
因此,getnameinfo() 和 getaddrinfo() 都使用 /etc/hosts 信息简单地返回机器的主机名,不带后缀,如下所示:
dfex@ironside:~/hush$ cat /etc/hosts
::1 ironside localhost6.localdomain6 localhost6
127.0.1.1 ironside
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
有谁知道一个函数可以在不诉诸 system() 调用的情况下提取这些信息?我一直在梳理 Beej 的指南,但没有取得多大成功。