是否必须将返回的结构从内核空间复制到用户空间?

时间:2012-03-06 12:09:22

标签: c struct copy system-calls

如果我进行系统调用,请说

struct hostent * gethostbyaddr (const char *addr, int len, int family );

并返回struct*,我是否需要将结构复制到我“拥有”的地方而不是直接使用指针?

2 个答案:

答案 0 :(得分:3)

gethostbyaddr reads的文档(请参阅注释部分):

  

函数gethostbyname()和gethostbyaddr()可能会返回指针   静态数据,可能会被以后的调用覆盖。复制   struct hostent是不够的,因为它包含指针;一个深刻的   需要复制。

这意味着如果您想确保后续调用gethostbyaddr不会覆盖它,则需要复制该结构。

但是你真的需要考虑使用getaddrinfo,因为gethostbyaddr已经过时了。使用getaddrinfo,您不会问这个问题,因为您需要自己为结果分配内存。

答案 1 :(得分:0)

不,您可以直接使用指针。

(考虑一下:如果内存无法访问或访问不安全,您将无法复制它;反之亦然,如果您能够复制它,您也可以在其中使用它)

相关问题