【发布时间】:2018-09-20 09:11:00
【问题描述】:
来自 gethostbyname(3) - Linux 手册
The functions gethostbyname() and gethostbyaddr() may return pointers
to static data, which may be overwritten by later calls. Copying the
struct hostent does not suffice, since it contains pointers; a deep
copy is required.
我编写了多次调用gethostbyname 的程序,并且没有因为覆盖静态数据而出现任何中断。
我能否举个例子,当多次调用gethostbyname 会覆盖此静态数据时?
【问题讨论】:
-
所有答案的tldr;它实际上是任何时候你调用它两次。
-
当然,这正是手册中所说的,为什么感到惊讶?
-
因为它说的是“可能”,而不是“将”。令我惊讶的是,答案概述了它每次都会发生,尽管如此,我很幸运地避免了难以调试的问题。
-
它不能说“将”,因为它会对实施施加过多的限制。
-
或者,换个说法,它说“可能”,以便某人可以编写一个 不 每次调用都会覆盖缓冲区的符合 实现。 afaict,此文本逐字取自 POSIX 规范的规范部分,因此它适用于所有符合要求的实现,而不仅仅是您系统上的那个。
标签: c posix gethostbyname gethostbyaddr