getaddrinfo
不是 C 标准库函数,它是 POSIX 标准的一部分,常用于网络编程。它在 <netdb.h>
头文件中声明,用于将主机名(hostname)或服务名称(service name)转换为一个地址信息结构。
函数原型
#include <netdb.h>
int getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res);
参数说明
node
: 主机名或 IP 地址,可以是字符串形式的域名或 IPv4/IPv6 地址。service
: 服务名称(如 “http”)或端口号(如 “80”),可以是字符串形式的服务名或数字。hints
: 一个指向struct addrinfo
的指针,用于提供请求地址信息的提示。res
: 输出参数,是一个指向动态分配的struct addrinfo
指针的指针,调用成功后将会包含结果。
返回值
- 成功时返回 0;失败时返回一个错误码。
示例用法
下面是一个简单示例,演示如何使用 getaddrinfo
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main() {
struct addrinfo hints, *res;
int status;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; // 可以处理 IPv4 或 IPv6
hints.ai_socktype = SOCK_STREAM; // TCP
if ((status = getaddrinfo("www.example.com", "80", &hints, &res)) != 0) {
fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
return 1;
}
// 在这里可以使用 res 中的信息创建套接字等
freeaddrinfo(res); // 释放内存
return 0;
}
总之,尽管 getaddrinfo
是 C 编程中非常重要和常用的函数,但它并不属于 ISO C 标准,而是 POSIX 的一部分。
内容由零声教学AI助手提供,问题来源于学员提问