zoukankan      html  css  js  c++  java
  • UNIX网络编程读书笔记:地址操纵函数

    地址格式转换函数:它们在ASCII字符串(人们比较喜欢用的格式)与网络字节序的二进制值(此值存于套接口地址结构中)间转换地址。

    1、inet_aton、inet_addr、inet_ntoa

    inet_aton、inet_addr和inet_ntoa在点分十进制数串(例如,”206.168.112.96“)与它的32位网络字节序二进制值间转换IPv4地址

    #include <arpa/inet.h>
    
    int inet_aton(const char *strptr, struct in_addr *addrptr);
    返回:1——串有效,0——串有错
    
    int_addr_t inet_addr(const char *strptr);
    返回:若成功,返回32位二进制网络字节序地址;若有错,则返回INADDR_NONE
    
    char *inet_ntoa(struct in_addr inaddr);
    返回:指向点分十进制数串的指针

    inet_aton将strptr所指的C字符串转换成32位网络字节序二进制值,并通过指针addrptr来存储。如果成功返回1,否则返回0.

    inet_addr进行与inet_aton相同的转换,返回值为32位的网络字节序二进制值。这个函数存在这样的问题:所有2^32个可能的二进制值都是有效的IP地址(从0.0.0.0到255.255.255.255),但当出错时返回一个常量INADDR_NONE(一般为一个32位均为1的值)。这就意味着点分十进制数串255.255.255.255(这是IPv4的有限广播地址)不能由此函数处理,因为它的二进制值被用来指示函数失败。

    inet_ntoa将一个32位的网络字节序二进制IPv4地址转换成相应的点分十进制数串。由函数返回值所指的串驻留在静态内存中,这意味着函数是不可重入的。

    2、inet_pton和inet_ntop函数

    inet_pton和inet_ntop是两个较新的函数,对IPv4和IPv6地址都能处理。字母p代表presentation,字母n代表numeric。地址的表达(presentation)格式通常是ASCII串,数值(numeric)格式则是存在于套接口地址结构中的二进制值。

    #include <arpa/inet.h>
    
    int inet_pton(int family, const char *strptr, void *addrptr);
    返回:1——成功,0——输入不是有效的表达式格式,-1——出错
    
    const char *inet_ntop(int family, const void *addrptr, 
                          char *strptr, size_t len);
    返回:成功——指向结果的指针,出错——NULL

    两个函数的参数family既可以是AF_INET,也可以是AF_INET6. 如果以不被支持的地址族作为family参数,两个函数都返回错误,并将errno置为EAFNOSUPPORT。

    inet_pton函数转换由指针strptr所指的串,通过指针addrptr存储二进制结果。如果成功,则返回值为1;如果对于指定的family输入串不是有效的表达格式,则返回为0.

    inet_ntop函数进行相反的转换,即从数值格式(addrptr)到表达式(strptr)进行转换。参数len是目标的大小,以免函数溢出其调用者的缓冲区。为了有助于规定这个大小,在头文件<netinet/in.h>中有如下定义:

    #define INET_ADDRSTRLEN    16    /* for IPv4 dotted-decimal */
       #define INET6_ADDRSTRLEN    46    /* for IPv6 hex string */

    如果len太小,无法容纳表达格式结果(包括终止的空字符),则返回一个空指针,并将errno设置为ENOSPC。

    函数inet_ntop的参数strptr不能是个空指针,调用者必须为目标分配内存并指定大小。成功时,此指针即函数的返回值。

     

    其他地址操纵函数:

    image

    image

    image

    image

    image

    image

  • 相关阅读:
    Exception in thread "main" com.sun.xml.internal.ws.streaming.XMLStreamReaderException: unexpected XML tag.
    Navicat的快捷键
    win7虚拟机起不来,报错transport vmdb error -44 message the vmware authorization
    fedora19配置 SSH 免密码登陆
    Linux下Django的安装
    linux下为用户添加sudo命令功能
    ubuntu修改系统环境变量文件导致起不来
    fedorea19安装redis
    java下载csv文件,中文标题
    POJ A Simple Problem with Integers | 线段树基础练习
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3585296.html
Copyright © 2011-2022 走看看