Macos 如何从OS X上的gethostname()获得一致的结果?

Macos 如何从OS X上的gethostname()获得一致的结果?,macos,router,Macos,Router,在Mac上调用gethostname()时,有时返回“george”,有时返回“george.local”。我可以改变什么使它总是返回相同的东西?(我不在乎哪一个,我只是希望它保持一致。) 背景:我在运行10.6的Mac上使用Unison(www.cis.upenn.edu/~bcpierce/Unison/index.html)。Unison使用一组东西(其中一个是主机名)来命名保存以前结果的文件。当gethostname()返回的字符串更改时,Unison找不到上一个文件。这会导致各种不愉快

在Mac上调用gethostname()时,有时返回“george”,有时返回“george.local”。我可以改变什么使它总是返回相同的东西?(我不在乎哪一个,我只是希望它保持一致。)

背景:我在运行10.6的Mac上使用Unison(www.cis.upenn.edu/~bcpierce/Unison/index.html)。Unison使用一组东西(其中一个是主机名)来命名保存以前结果的文件。当gethostname()返回的字符串更改时,Unison找不到上一个文件。这会导致各种不愉快的行为

最初配置系统时,我将共享控制面板中的名称设置为“George”。当前,当我使用hostname命令时,它返回“george”。几天前我使用Unison时,Unison使用了“George.local”这个名字。在过去的几个月里,我已经多次看到这种行为

在这段时间里,我改变了很多事情;我不知道哪一个,如果有的话,可能是重要的

1) 我在笔记本电脑上做这件事。在不同的时间,它连接到不同的路由器,有时根本没有连接

2) 我可能在两次之间升级了OS X版本。对于当前版本,我确信我已经升级了(从10.6.6升级到10.6.7)。对于以前发生的事情,我不记得了

3) 有时我使用机场连接,有时使用电缆连接

有人能解释一下gethostname()可能在做什么,以及为什么它可能返回不同的字符串吗

谢谢,帕特

(2011年5月1日更新)问题似乎是OS X和我的AT&T DSL服务的2线路由器之间的交互不好。当我在没有连接到网络的情况下启动时,主机名返回“George.local”,这是我在共享控制面板中设置的。一旦我使用以太网或机场连接到路由器,主机名现在返回“george”

在控制此功能的特定路由器中是否有一些配置选项


我的Verizon FIOS路由器或Verizon DSL都没有出现这种情况。我不记得那些路由器的品牌了,但2Wire也不记得了。

我提供一个不同的替代方案怎么样?gethostbyname()实际上是一个较旧的API,实际上不是当前推荐使用的API。当前推荐使用的API是getaddrinfo(),它已经标准化,几乎无处不在。你应该考虑切换到那个!p> 我提供一个不同的替代方案怎么样?gethostbyname()实际上是一个较旧的API,实际上不是当前推荐使用的API。当前推荐使用的API是getaddrinfo(),它已经标准化,几乎无处不在。你应该考虑切换到那个!p> 嗨,韦斯。为了澄清一些事情,您说过不建议使用“gethostbyname”。Unison使用“gethostname”,它是POSIX库的一部分。所以,除非我误解了什么,否则这个建议实际上并不适用于当前的情况。我错过了什么吗?我不是说它不存在,也不会存在很长时间。但是,它不可移植(因为不是所有东西都符合POSIX),getaddrinfo被设计成以更好的方式处理多种事情(如IPv6地址)。它在RFC 3493中定义,并且在任何地方都得到了一致的实现。现在不过,我要再说一遍:您仍然可以使用gethostbyname()gethostname与gethost\u by\u name。两个不同的电话。这就是我要问的。嗨,韦斯。为了澄清一些事情,您说过不建议使用“gethostbyname”。Unison使用“gethostname”,它是POSIX库的一部分。所以,除非我误解了什么,否则这个建议实际上并不适用于当前的情况。我错过了什么吗?我不是说它不存在,也不会存在很长时间。但是,它不可移植(因为不是所有东西都符合POSIX),getaddrinfo被设计成以更好的方式处理多种事情(如IPv6地址)。它在RFC 3493中定义,并且在任何地方都得到了一致的实现。现在不过,我要再说一遍:您仍然可以使用gethostbyname()gethostname与gethost\u by\u name。两个不同的电话。这就是我要问的。看起来你更新的问题现在更像是一个or问题。可能是路由器有一个DHCP服务器发送主机名。看起来你更新的问题现在更像是一个or问题。可能是路由器有一个发送主机名的DHCP服务器。