c - 为什么 getaddrinfo 需要 3 个 header ?

标签 c linux sockets unix networking

每当我看到使用 getaddinfo() 时,我都会看到它与 3 个 header 一起出现:

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

此外,the documentation将此函数与其他 2 个函数组合在一起,并列出相同的 3 个标题。为什么 getaddrinfo() 需要 3 个 header ——或者至少,我们如何才能确定哪些是函数实际需要的?

最佳答案

正如您在问题中引用了文档,答案是您应该始终对接口(interface)的记录方式进行编码。由于记录需要这三个 header ,因此在使用接口(interface)时应包含这些 header 。

关于细节,getaddrinfo() API 在 <netdb.h> 中定义头文件,但该头文件定义了一些依赖于 <sys/socket.h> 的其他结构和 API这取决于 <sys/types.h> .

您可能认为这很愚蠢,但它至少有文档记录,而且您知道在哪里可以找到文档。因此,解决这些依赖关系比在具有此类依赖关系但未能记录它们的项目中容易得多。对于文档不完善的系统(甚至文档完善的系统),使用自包含的头文件通常更容易,但 UNIX 和 Linux 是相当古老且稳定的系统,它们倾向于遵循“不会坏,不会坏”的原则修复”规则。

关于c - 为什么 getaddrinfo 需要 3 个 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23050619/

相关文章:

c - 为什么 more 命令不使用 stdin 来读取输入?

CS50 PSET 1 贪婪

linux - 权限被拒绝(公钥),在 Linux AWS 服务器上我可以修复它吗?

c - C 中的 boolean 函数

java - BufferedReader.read() 占用 100% 的 CPU

java - 套接字使用的 GZIPOutputStream 长度

c# - Web套接字Ping/Pong和Close控制框架的实现

c - 二维数组变量指针混淆

c - 通过 C 套接字发送结构

linux - 如何在 Windows 中安装 InfluxDB