isinet_addr 子例程

用途

确定给定的 ASCII 字符串是否包含使用点表示法的因特网地址。

标准 C 库 (libc.a)

语法

#include <sys/types.h>
#include <netinet/in.h>

u_long isinet_addr (name)
char * name;

描述

isinet_addr 子例程确定给定的 ASCII 字符串是否包含使用点表示法的因特网地址 (例如, "120.121.122.123")。 isaddr_inet 子例程将因特网地址字符串视为有效字符串,并将任何其他字符串类型视为无效字符串。

isinet_addr 子圆板期望 ASCII 字符串符合以下格式:

string ::= field | field delimited_field^1-3 
delimited_field ::= delimiter field
delimiter ::= .
field ::= 0 X | 0 x | 0 X hexadecimal* | 0 x 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 指示模式 A 的 n 重复。
^n-m 指示模式 A 的 nm 重复。
阿 * 指示模式 A 的零次或多次重复,直至达到环境限制。

BNF 描述显式声明空格字符 ('') (如果使用)。

描述
{文本} 指示 text,而不是 BNF 符号。

isinet_addr 子圆板允许应用程序使用空终止符 (0x00) 或空格 (0x30) 来终止字符串。 如果应用程序未使用空终止符 (0x00) 或空格 (0x30) 终止字符串,那么它将忽略跟在空格字符后面的字符,并将该字符串视为无效。

下面描述了对字段值的限制:

地址格式 字段限制 (以十进制为基数的值)
a a < 4294967296.
a.b a < 256; b < 16777216。
a.b.c a < 256;b < 256;c < 16777216。
a.b.c.d a < 256; b < 2^8; c < 256; d < 256。

isinet_addr 子圆形应用程序可以输入超过先前指定的字段值限制的字段值; isinet_addr 接受长度不超过整数的最低有效位。 isinet_addr 子例程仍然检查截断的值是否超过最大字段值。 例如,如果应用程序提供了字符串0.0;0;0xFF00000001那么 isinet_addr 会将字符串解释为0.0.0.0x00000001并将字符串视为有效。

isinet_addr 应用程序无法在定界符之间省略字段值,并将具有连续句点的字符串视为无效。

有效字符串的示例:

输入字符串 注释
1 isinet_addr 使用 格式。
1.2 isinet_addr 使用 a.b 格式。
1.2.3.4 isinet_addr 使用 a.b.c.d 格式。
0x01.0X2.03.004 isinet_addr 使用 a.b.c.d 格式。
1.2 3.4 isinet_addr 使用 a.b 格式; 并忽略 "3.4"。

无效字符串的示例:

输入字符串 原因
... 未指定显式字段值。
1.2.3.4.5 字段过多。
1.2.3.4. 定界符和字段过多。
1,2 定界符错误。
1p 字符串未由空终止符或空格终止。
{empty string} 不存在字段或定界符。
9999.1.1.1 字段 a 的值超过限制。
注意:
  1. isinet_addr 子例程不检查指向 ASCII 字符串的指针; 用户负责确保 ASCII 字符串地址的有效性。
  2. 应用程序负责验证因特网地址的网络号和主机号是否符合 A 类, B 类或 C 类因特网地址; 任何其他字符串都将作为 C 类地址进行处理。

所有使用 isinet_addr 的应用程序都必须使用定义的 _BSD 宏进行编译。 此外,所有套接字应用程序都必须包含 BSD 库 libbsd (如果适用)。

参数

描述
名称 ASCII 字符串缓冲区的地址。

返回值

isinet_addr 子例程针对有效输入字符串返回 1 ,针对无效输入字符串返回 0。 isinet_addr 将值作为无符号长整型返回。

文件

#include < ctype.h >

#include < sys/types.h >