inet_network 子例程
用途
转换包含因特网网络地址的 ASCII 字符串。 (点) 因特网地址号的表示法。
库
标准 C 库 (libc.a)
语法
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h> 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.0xabcdef, inet_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 | 包含网络名称。 |