【问题标题】:a problem about a function __gethostbyname_r in the source file of gethostbyname关于gethostbyname源文件中函数__gethostbyname_r的问题
【发布时间】:2021-12-18 21:41:17
【问题描述】:

我是一个新程序员。当我尝试读取getXXbyYY.c,glibc中gethostbyname()的源文件时,我发现了一个关于宏的函数。

INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer,buffer_size, &result H_ERRNO_VAR)

可以通过以下宏解析为__gethostbyname_r()

#define REENTRANT_NAME APPEND_R (FUNCTION_NAME)
#define APPEND_R(name) APPEND_R1 (name)
#define APPEND_R1(name) name##_r
#define INTERNAL(name) INTERNAL1 (name)
#define INTERNAL1(name) __##name 

然后我试图找到__gethostbyname_r()的实现,但是我只是在netdb.h找到了原型。

那么,我想知道__gethostbyname_r()的实现在哪里,它会做什么?

【问题讨论】:

  • 它可能是使用类似的宏定义的。只需查找gethostbyname_r(不带双前导下划线),看看你会发现什么。

标签: c linux glibc


【解决方案1】:

安装了libc6-dbg 包:

gdb /lib/x86_64-linux-gnu/libc.so.6

(gdb) info func __gethostbyname_r
All functions matching regular expression "__gethostbyname_r":

File ../nss/getXXbyYY_r.c:
188:    int __gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *);

这告诉您应该查看$GLIBC_SRC/nss/getXXbyYY_r.c 文件,在第 188 行附近。

【讨论】:

  • 还可以查看$GLIBC_SRC/inet/gethstbynm_r.c 以查看#include "../nss/getXXbyYY_r.c" 使用的外部宏扩展。
猜你喜欢
  • 2013-02-04
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多