空主机名 (sethostname)

空主机名 (sethostname)

由于一些不相关的原因,我想使用sethostname系统调用将 Linux 计算机的主机名设置为空字符串。

#include <unistd.h>

int main()
{
    sethostname("", 0);
    return 0;
}

虽然这原则上有效,但我想知道 a.) 空主机名是否符合 SUSv2 和 POSIX.1 以及 b.) 设置空主机名是否会导致一些我目前未预见到的负面影响?

答案1

您可能会从某些程序中得到令人困惑的输出,如果另一个程序尝试解析它们,这可能会导致问题。

例如,在我尝试过的系统上,输出uname -a变成了这样:

Linux  2.6.42-amd64 #1 SMP ...

其中主机名应位于两个空格之间。如果某个程序尝试以 awk 默认情况下的方式解析它,即将连续空格视为一个,那么它们最终会选择错误的字段。当然,您可以使用uname -m或其他替代方法来代替 parse uname -a,但这同样适用于其他程序。

rsyslog通过用占位符替换空字符串来规避这个问题:

Jan 15 18:28:14 localhost-empty-hostname kernel: [32741563.144045]...

这应该不会引起任何问题,但也不太漂亮。

(哦,至少在 Debian 上,该hostname命令不接受空主机名,所以我猜有人不认为这是受支持的配置。我有点惊讶内核确实接受了这一点,但它可能不接受无论如何,除了某些输出之外,在内部使用它。)

相关内容