预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共36页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Unix网络编程API 1.字节序函数 #include<netinet.h>uint16_thtons(uint16_thost16bitvalue);uint32_thtonl(uint32_thost32bitvalue);返回:网络字节序值 uint16_tntohs(uint16_tnet16bitvalue);uint32_tntohl(uint32_tnet32bitvalue);返回:主机字节序值 一个测试本机字节序的程序,可参见见unpv12e:intro/byteorder.c。 2.字节操作函数 #include<strings.h>voidbzero(void*dest,size_tnbytes);voidbcopy(constvoid*src,void*dest,size_tnbytes);intbcmp(constvoid*ptr1,constvoid*ptr2,size_tnbytes);返回:0—相等,非0—不相等 #include<string.h>void*memset(void*dest,intc,size_tlen);void*memcpy(void*dest,void*src,size_tnbytes);intmemcmp(constvoid*ptr1,constvoid*ptr2,size_tnbytes);返回:0—相同,>0或<0—不相同;进行比较操作时,假定两个不相等的字节均为无符号字符(unsignedchar)。 3.地址转换函数 #include<arpa/inet.h>intinet_aton(constchar*strptr,structin_addr*addrptr);返回:1—串有效,0—串有错。 in_addr_tinet_addr(constchar*strptr);返回:若成功,返回32为二进制的网络字节序地址;若有错,则返回INADDR_NONE。 char*inet_ntoa(structin_addrinaddr);返回:指向点分十进制数串的指针。 intinet_pton(intfamily,constchar*strptr,void*addrptr);返回:1—成功;0—输入不是有效的表达格式,-1—出错。 constchar*inet_ntop(intfamily,constvoid*addrptr,char*strptr,size_tlen);返回:指向结果的指针—成功,NULL—失败。 说明: inet_aton函数的指针若为空,则函数仍然执行输入串的有效性检查,但不存储任何结果。 inet_addr的缺陷:出错返回值INADDR_NONE等于255.255.255.255(IPv4的有限广播地址),所以该函数不能处理此地址。尽量使用inet_aton,不使用inet_addr。 inet_ntoa函数的执行结果放在静态内存中,是不可重入的。 参数family可以是AF_INET,也可以是AF_INET6,若参数family不被支持,则出错,errno置为EAFNOSUPPORT。 指针addrptr是结构指针。 len指定目标的大小,避免缓冲区溢出。如果len太小,则返回一个空指针,errno置为ENOSPC。为有助于规定该大小,有如下定义:#include<netinet.h>#defineINET_ADDRSTRLEN16/*froIPv4dotted-decimal*/#defineINET6_ADDRSTRLEN46/*forIPv6hexstring*/ inet_ntop函数的参数strptr不能为空指针,成功时,此指针即是函数的返回值。 实现IPv4版本的inet_pton和inet_ntop的程序,参见:unpv12e:libfree/inet_pton_ipv4.c和libfree/inet_ntop_ipv4.c。 4.readn、writen和readline 函数原型如下:ssize_treadn(intfiledes,void*buff,size_tnbytes);ssize-twriten(intfiledes,void*buff,size_tnbytes);ssize_treadline(intfiledes,void*buff,size_tmaxlen);返回:读写字节数,-1—出错。 实现程序见:unpv12e:lib/readn.c、lib/writen.c、lib/readline1.c和lib/readline.c。 5.测试描述符类型 #include<sys/stat.h>intisfdtype(intfd,intfdtype);返回:1—是指定类型,0—不是指定类型,-1—出错。 要测试