由于一些不相关的原因,我想使用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
命令不接受空主机名,所以我猜有人不认为这是受支持的配置。我有点惊讶内核确实接受了这一点,但它可能不接受无论如何,除了某些输出之外,在内部使用它。)