当前位置: 首页 > news >正文

Linux 地址转换函数详解

1. 概述

在Linux网络编程中,地址转换函数用于在点分十进制字符串二进制网络字节序之间转换IP地址。这些函数主要定义在 <arpa/inet.h> 头文件中。

2. 主要函数分类

2.1 IPv4专用函数(已过时,但仍有使用)

inet_aton() - 字符串转网络字节序
#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>intinet_aton(constchar*cp,structin_addr*inp);
  • 功能:将点分十进制字符串转换为32位网络字节序整数
  • 参数
    • cp:点分十进制IP地址字符串(如"192.168.1.1")
    • inp:存储转换结果的struct in_addr
  • 返回值:成功返回1,失败返回0
inet_addr() - 字符串转网络字节序(有缺陷)
in_addr_tinet_addr(constchar*cp);
  • 问题:无法处理255.255.255.255(返回INADDR_NONE)
  • 不推荐使用,建议使用inet_pton
inet_ntoa() - 网络字节序转字符串
char*inet_ntoa(structin_addrin);
  • 注意:返回指向静态缓冲区的指针,不可重入
  • 线程不安全

关于inet_ntoa

inet_ntoa 这个函数返回了一个char*, 很显然是这个函数自己在内部为我们申请了一块内存来保存ip 的结果. 那么是否需要调用者手动释放呢?

man 手册上说, inet_ntoa 函数, 是把这个返回结果放到了静态存储区. 这个时候不需要我们手动进行释放.

那么问题来了, 如果我们调用多次这个函数, 会有什么样的效果呢? 参见如下代码:

运行结果如下:

因为inet_ntoa 把结果放到自己内部的一个静态存储区, 这样第二次调用时的结果会覆盖掉上一次的结果.

在多线程环境下, 推荐使用inet_ntop, 这个函数由调用者提供一个缓冲区保存结果, 可以规避线程安全问题

2.2 IPv4/IPv6通用函数(推荐)

inet_pton() - 字符串转二进制(可移植)
intinet_pton(intaf,constchar*src,void*dst);
  • 功能:将字符串地址转换为二进制格式
  • 参数
    • af:地址族(AF_INET或AF_INET6)
    • src:源字符串
    • dst:目标缓冲区
  • 返回值:成功返回1,格式无效返回0,错误返回-1
inet_ntop() - 二进制转字符串(可移植)
constchar*inet_ntop(intaf,constvoid*src,char*dst,socklen_t size);
  • 功能:将二进制地址转换为字符串
  • 参数
    • af:地址族
    • src:源二进制地址
    • dst:目标字符串缓冲区
    • size:缓冲区大小(使用INET_ADDRSTRLEN 或INET6_ADDRSTRLEN)
  • 返回值:成功返回dst指针,失败返回NULL

3. 缓冲区大小常量

#defineINET_ADDRSTRLEN16// IPv4地址字符串最大长度#defineINET6_ADDRSTRLEN46// IPv6地址字符串最大长度

4. 函数对比与选择建议

函数地址族线程安全可重入推荐度
inet_aton()IPv4★★★☆☆
inet_addr()IPv4★☆☆☆☆(有缺陷)
inet_ntoa()IPv4★☆☆☆☆(线程不安全)
inet_pton()IPv4/IPv6★★★★★
inet_ntop()IPv4/IPv6★★★★★

总结

  • 推荐使用inet_pton()和inet_ntop(),它们支持IPv4/IPv6且线程安全
http://www.gsyq.cn/news/129597.html

相关文章:

  • 1、深入了解 PowerShell 中的变量、数组和哈希
  • 41、嵌入式系统驱动测试与目标系统解析
  • 2011-2023年省级共同富裕数据+Stata代码
  • Excalidraw实战案例:快速绘制系统架构与数据流图
  • Excalidraw在敏捷开发中的应用场景全解析
  • Linly-Talker与火山引擎TTS性能对比分析
  • Linly-Talker可用于生成AI财经评论员
  • Offline RL 的现实应用与未来方向:从落地实战到大模型融合
  • 从 0 实现一个 Offline RL 算法 (以 IQL 为例)
  • Linly-Talker与百度语音识别联合适配成功
  • 8、企业网络设计案例分析
  • 用Excalidraw开源白板,轻松实现AI驱动的技术架构设计
  • Linly-Talker在银行网点智能柜员机上的集成
  • Day 43图像数据与显存机制@浙大疏锦行
  • 3、企业网络环境评估与Active Directory项目规划指南
  • Linly-Talker可用于生成AI歌手演唱视频
  • Linly-Talker与Google Cloud TTS互操作性测试
  • 13、Windows 10 启动与网络故障排查指南
  • Linly-Talker支持多人脸混合驱动技术
  • 2、Windows 10 操作指南:从基础手势到开关机全解析
  • redis 问题记录笔记
  • 4、Windows 10 使用指南:Cortana、设置调整与网络连接
  • 2025年12月上海卧式砂磨机厂家竞争格局深度解析报告 - 2025年品牌推荐榜
  • Linly-Talker支持跨平台SDK接入(iOS/Android/Web)
  • 10、Windows 2000 性能监控与数据管理解析
  • 2026年计算机等级考试报名时间定了!速看报名照攻略
  • 12、Windows 2000 性能监控:计数器类型与数据记录解析
  • 13、Windows 系统性能数据记录与分析全解析
  • 14、Windows 2000 性能监控全解析
  • Linly-Talker支持实时字幕叠加输出