inet_addr 子例程
用途
将因特网地址转换为因特网号码。
库
标准 C 库 (libc.a)
语法
#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_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- ^n指示模式的重复 N 次。
- ^n-m指示模式的 N 到 M 重复。
- * 指示模式的重复 0 为 0 或更多,达到环境限制。
- 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。
- Inet_addr 子例程并不检查指向 ASCII 字符串的指针。 用户必须确保该地址在 ASCII 字符串中的有效性。
- 应用程序必须验证因特网地址的网络标识和主机标识是否符合 A 类, B 类或 C 类因特网地址。 Inet_attr 子例程将任何其他数字作为 C 类地址处理。
参数
| 项 | 描述 |
|---|---|
| CharString | 在因特网地址表单中表示字符串。 |
返回值
对于有效的输入字符串, Inet_addr 子例程返回由合并在一起的输入字段的位模式组成的无符号整数值。 子例程将第一个模式放置在最重要的位置,并将任何后续模式附加到下一个最重要的位置。
如果字符串无效,inet_addr子程序将返回错误值-1。
文件
| 项 | 描述 |
|---|---|
| /etc/hosts | 包含主机名。 |
| /etc/networks | 包含网络名称。 |