inet_network 子例程

用途

转换包含因特网网络地址的 ASCII 字符串。 (点) 因特网地址号的表示法。

标准 C 库 (libc.a)

语法

#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
in_addr_t inet_network ( CharString)
register const char *CharString;

描述

inet_network 子例程转换包含有效因特网地址的 ASCII 字符串。 (点) 表示法 (例如,120.121.122.123) 到格式化为无符号整数值的因特网地址号。 如果应用程序未提供包含有效因特网地址的 ASCII 字符串,那么 inet_network 子例程将返回错误值。 表示法。

输入 ASCII 字符串必须表示有效的因特网地址号,如 网络和通信管理中的 "TCP/IP 寻址" 中所述。 输入字符串必须以空终止符 (0x00) 或空格 (0x30) 终止。 inet_network 子例程忽略跟在终止字符后面的字符。

输入字符串可以用十进制,十六进制或八进制格式表示因特网地址号。 十六进制格式,字符串必须以0x. 字符串必须以0以指示八进制格式。 在十进制格式中,字符串不需要前缀。

输入字符串的每个八位元必须由句点分隔。 应用程序可以省略定界符之间的值。 inet_network 子例程将缺失值解释为 0。

以下示例以十进制和十六进制表示法显示有效字符串及其输出值:

有效字符串的示例
输入字符串 输出值 (十进制) 输出值 (十六进制)
...1 1 0x00000001
.1.. 65536 0x00010000
1 1 0x1
0xFFFFFFFF 255 0x000000FF
1 256 0x100
1.2.3.4 66048 0x010200
0x01.0X2.03.004 16909060 0x01020304
1.2. 3.4 16777218 0x01000002
9999.1.1.1 251724033 0x0F010101

以下示例显示无效输入字符串及其无效原因:

无效字符串示例
输入字符串 原因
1.2.3.4.5 字段过多。
1.2.3.4. 定界符过多 (因此是字段)。
1,2 定界符错误。
1p 字符串未由空终止符或空格终止。
{empty string} 不存在字段或定界符。

通常,因特网地址的每个八位元的值不能超过 246。 inet_network 子例程可以接受较大的值,但它只对每个字段值使用 8 个最不重要的位。 例如,如果应用程序通过0x1234567890.0xabcdefinet_network 子例程返回37103(0x000090EF).

应用程序必须验证因特网地址的网络标识和主机标识是否符合类 A ,类 B 或类 C。 inet_makeaddr 子例程将任何不一致的数字作为 C 类地址处理。

inet_network 子例程不检查指向 ASCII 输入字符串的指针。 应用程序必须验证字符串地址的有效性。

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

参数

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

返回值

对于有效的输入字符串, inet_network 子例程返回一个无符号整数值,该值包含并置在一起的输入字段的位模式。 inet_network 子例程将第一个模式放在最左边 (最重要) 的位置,并附加后续模式 (如果存在)。

对于无效的输入字符串,inet_network子程序会返回-1。

文件

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