1、字节操纵函数
void bzero(void *dest, size_t nbytes);
bzero把目标字节串中指定数目的字节置0。我们经常使用该函数把一个套接字地址结构初始化为0。
void bcoyp(const void *src, void *dest, size_t nbytes);
将指定数目的字节从源字节串移动到目标字节串。
int bcmp(const void *ptr1, const void *ptr2, size_t nbytes);
比较两个任意的字节串,若相同则返回0,若不同则返回非0.
2、地址转换函数:它们在ASC2字符串与网络字节序的二进制之间转换网际地址。
inet_aton、inet_addr、inet_ntoa在点分十进制数串(如"192.168.112.96")与长度为32位的网络字节序
二进制间转换IPv4地址。"a"是指ASC2;"n"是指net
inet_pton和inet_ntop对于IPv4和IPv6地址都适应。
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
将strptr所指的C字符串转换成32位的网络字节序二进制值,并通过addrptr来存储。
返回:若字符串有效则为1,否则为0.
int_addr_t inet_addr(const char *strptr);
int_addr进行与上面相同的转换,返回值为32为二进制网络字节序值。
返回:若字符串有效则为32位二进制网络字节序的IPv4地址,否则为INADDR_NONE.
该函数存在一个问题:点分十进制数串"255.255.255.255"(这是IPv4的有限广播地址)不能由该函数处理。
如今inet_addr已被废弃,新的代码(IPv4)应该使用inet_aton函数。
char *inet_ntoa(struct in_addr inaddr);
将一个32位的网络字节序二进制IPv4地址转换成相应的点分十进制数串。
返回:指向一个点分十进制数串的指针。
函数inet_pton和函数inet_ntop是随IPv6出现的新函数,对于IPv4地址和IPv6地址都适用。
函数名p和n分别代表 表达presentation和数值numeric。地址的表达式格式通常是ASC2字符串,
数值格式则是存放到套接字地址结构中的二进制值。
#include <arpa/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr);
返回:若成功则为1,若输入不是有效的表达式则为0,若出错则为-1.
family参数既可以是AF_INET,也可以是AF_INET6。若一不被支持的地址族作为family参数,这两个
函数都返回一个错误,并将errno置为EAFNOSUPPORT.
inet_pton转换由strptr指针所指的字符串,并将addrptr指针存放二进制结果。
const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
返回:若成功则为指向结果的指针,若出错则为NULL。
inet_ntop进行相反的转换,从数值格式addrptr转换到表达式格式strptr。len参数是目标存储单元的
大小,以免该函数溢出其调用者的缓冲区。为了有助于指定这个大小,在<netinet/in.h>头文件中有如
下定义:
#define INET_ADDRSTRLEN 16 /* for IPv4 dotted-decimal */
#define INET6_ADDRSTRLEN 46 /* for IPv6 hex string */
3、读写函数
ssize_t readn(int filedes, void *buff, size_t nbytes);
ssize_t writen(int filedes, const void *buff, size_t nbytes);
ssize_t readline(int filedes, void *buff, size_t maxlen);
均返回读写到的字节数,出错返回-1