首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

《UNIX网络编程 卷一》例子程序中所使用的包裹函数及部分常量

2012-11-03 
《UNIX网络编程 卷1》例子程序中所使用的包裹函数及部分常量《UNIX网络编程 套接字联网API》这本书的示例中定

《UNIX网络编程 卷1》例子程序中所使用的包裹函数及部分常量

    《UNIX网络编程 套接字联网API》这本书的示例中定义了许多包裹函数,它们的名称和标准函数一样,只是首字母变成大写字母;每个包裹函数完成实际的函数调用,检查返回值,并在发生错误时终止程序。

    我在重写书上例子的时候,也仿照书上的方式,定义了许多包裹函数,提高程序的可读性(当然,我定义的包裹函数的错误处理没有书上例子这么详细了)


PS:这篇文章(博客)会持续更新。


文件my_unp_v1.h:它定义了一些常量,声明了所有的包裹函数

#include "my_unp_v1.h"//此函数是在程序发生错误时被调用//先输出字符串fmt,再根据errno输出错误原因(如果有的话),最后退出程序//注:在多线程程序中,错误原因可能不正确void error_quit(char *fmt, ...){int res;va_list list;va_start(list, fmt);res = vfprintf(stderr, fmt, list);if( errno != 0 )fprintf(stderr, " : %s", strerror(errno));fprintf(stderr, "\n", list);va_end(list);exit(1);}ssize_t Read(int fd, void *ptr, size_t nbytes){ssize_tn = read(fd, ptr, nbytes);if ( n == -1)error_quit("read error");return n;}void Write(int fd, void *ptr, size_t nbytes){if (write(fd, ptr, nbytes) != nbytes)error_quit("write error");}void Close(int fd){if (close(fd) == -1)error_quit("close error");}void Fputs(const char *ptr, FILE *stream){if (fputs(ptr, stream) == EOF)error_quit("fputs error");}int Socket(int family, int type, int protocol){intn = socket(family, type, protocol);if( n < 0)error_quit("socket error");return n;}void Inet_pton(int family, const char *strptr, void *addrptr){intn = inet_pton(family, strptr, addrptr);if( n < 0)error_quit("inet_pton error for %s", strptr);}void Connect(int fd, const struct sockaddr *sa, socklen_t salen){if (connect(fd, sa, salen) < 0)error_quit("connect error");}void Listen(int fd, int backlog){if (listen(fd, backlog) < 0)error_quit("listen error");}void Bind(int fd, const struct sockaddr *sa, socklen_t salen){if (bind(fd, sa, salen) < 0)error_quit("bind error");}int Accept(int fd, struct sockaddr *sa, socklen_t *salenptr){intn = accept(fd, sa, salenptr);if ( n < 0)error_quit("accept error");return n;}const char *Inet_ntop(int family, const void *addrptr, char *strptr, size_t len){const char*ptr = inet_ntop(family, addrptr, strptr, len);if ( ptr == NULL)error_quit("inet_ntop error");/* sets errno */return ptr;}


热点排行