inet_addr 子例程

用途

将因特网地址转换为因特网号码。

标准 C 库 (libc.a)

语法

#include <sys/socket.h>
#include <sys/socketvar.h>
#include <netinet/in.h>
#include <arpa/inet.h>

in_addr_t inet_addr ( CharString)
register const char *CharString;

描述

Inet_addr 子例程使用点表示法将包含有效因特网地址的 ASCII 字符串转换为输入为无符号整数值的因特网地址号。 点表示法的示例为 120.121.5.123。 如果应用程序提供的 ASCII 字符串中的因特网地址表示法无效,那么 Inet_addr 子例程将返回错误值。

注: 虽然它们都以点表示法将因特网地址转换为因特网编号,但 Inet_addr 子例程和 Inet_network 以不同方式处理 ASCII 字符串。 当应用程序为 Inet_addr 子例程提供一个包含不带定界符的因特网地址值的字符串时,该子例程将返回该字符串和 0xFFFFFFFF所表示的值的逻辑乘积。 对于任何其他 Internet 地址,如果字段的值超过先前定义的限制,inet_addr子程序将返回错误值-1。

当应用程序为 Inet_network 子例程提供包含不带定界符的因特网地址值的字符串时, Inet_network 子例程将返回该字符串和 0xFF所表示的值的逻辑乘积。 对于任何其他 Internet 地址,如果字段值超出了先前定义的限制,子程序将返回错误值-1。

所有包含 Inet_addr 子例程的应用程序都必须在将 _BSD 宏设置为特定值的情况下进行编译。 可接受的值为 43 和 44。 此外,所有套接字应用程序都必须包含 BSD libbsd.a 库。

每个子例程的样本返回值如下所示:

应用程序字符串 inet_addr 返回 inet_network 返回
0x1234567890abcdef 0x1234567890abcdef. 256.257.258.259 0x090abcdef 0xFFFFFFFF (= -1) 0xFFFFFFFF (= -1) 0x000000ef 0x0000ef00 0x00010203

Inet_addr 子例程的 ASCII 字符串必须符合下面的格式:

string::= field | field delimited_field^1-3 | delimited_field^1-3
delimited_field::= delimiter field | delimiter
delimiter::= .
field::= 0X | 0x | 0Xhexadecimal* | 0x hexadecimal* | decimal* | 0 octal
hexadecimal::= decimal |a|b|c|d|e|f|A|B|C|D|E|F
decimal::= octal |8|9
octal::= 0|1|2|3|4|5|6|7
注意:
  1. ^n指示模式的重复 N 次。
  2. ^n-m指示模式的 NM 重复。
  3. * 指示模式的重复 0 为 0 或更多,达到环境限制。
  4. Backus Naur 格式 (BNF) 描述声明了空格字符 (如果使用了空格字符)。 文本 指示文本,而不是 BNF 符号。

Inet_addr 子例程需要应用程序使用 NULL 终止符 (0x00) 或空格 (0x30) 来终止字符串。 如果应用程序未以 null 终止符或空格结束该字符串,那么该字符串将被视为无效。 子例程忽略空格后面的字符。

以下描述了对 Inet_addr 子例程的字段值的限制:

格式 字段限制 (十进制)
a 瓦卢 E_a < 4,294,967,296
a.b 瓦卢 E_a < 256; 值 b < 16,777,216
a.b.c 瓦卢 E_a < 256; 值 b < 256; Value_c < 65536
a.b.c.d 瓦卢 E_a < 256; 值 b < 256; Value_c < 256; Value_d < 256

使用 Inet_addr 子例程的应用程序可以输入超过这些限制的字段值。 子例程接受最大长度为整数的最低有效位,然后检查截断的值是否超过最大字段值。 例如,如果应用程序输入字段值 0x1234567890 ,并且系统使用每个整数 16 位,那么 Inet_addr 子例程使用位 0 到 15。 子例程返回 0x34567890。

应用程序可以省略定界符之间的字段值。 Inet_addr 子例程将空字段解释为 0。

注意:
  1. Inet_addr 子例程并不检查指向 ASCII 字符串的指针。 用户必须确保该地址在 ASCII 字符串中的有效性。
  2. 应用程序必须验证因特网地址的网络标识和主机标识是否符合 A 类, B 类或 C 类因特网地址。 Inet_attr 子例程将任何其他数字作为 C 类地址处理。

参数

描述
CharString 在因特网地址表单中表示字符串。

返回值

对于有效的输入字符串, Inet_addr 子例程返回由合并在一起的输入字段的位模式组成的无符号整数值。 子例程将第一个模式放置在最重要的位置,并将任何后续模式附加到下一个最重要的位置。

如果字符串无效,inet_addr子程序将返回错误值-1。

注: 点表示法值为 255.255.255.255 或其等效基本格式的因特网地址会导致 inet_addr 子例程返回无符号整数值 4294967295。 该值与错误值的未签名表示完全相同。 否则, inet_addr 子例程将 255.255.255.255 视为有效的因特网地址。

文件

描述
/etc/hosts 包含主机名。
/etc/networks 包含网络名称。