摘要: 栈的链表实现(缺点:对malloc和free的调用的开销昂贵) 栈ADT链表实现的类型声明 #ifndef _Stack_hstruct Node;typedef struct Node *PtrToNode;typedef PtrToNode Stack;int IsEmpty( Stack S );Stack CreateStack( void );voi... 阅读全文
posted @ 2014-03-18 21:17 ITtecman 阅读(1148) 评论(0) 推荐(0) 编辑
摘要: 辅助数据(ancillary data)可通过调用sendmsg和recvmsg这两个函数,使用msghdr结构中的msg_control和msg_controllen这两个成员发送和接收。 辅助数据的另一个称谓是控制信息(control information)。 辅助数据由一个或多个辅助数据对象(ancillary data object)构成,每个对象以一个定义在头文件中的cmsgh... 阅读全文
posted @ 2014-03-18 13:40 ITtecman 阅读(3379) 评论(0) 推荐(0) 编辑
摘要: 这两个函数是最通用的I/O函数。实际上我们可以把所有read、readv、recv和recvfrom调用替换成recvmsg调用。类似地,各种输出函数调用也可以替换成sendmsg调用。 #include ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, struct... 阅读全文
posted @ 2014-03-18 11:40 ITtecman 阅读(7463) 评论(0) 推荐(0) 编辑
摘要: 这两个函数类似于read和write,不过readv和writev允许单个系统调用读入到或写出自一个或多个缓冲区。这些操作分别称为分散读(scatter read)和集中写(gather write),因为来自读操作的输入数据被分散到多个应用缓冲区中,而来自应用缓冲区的输出数据则被集中提供给单个写操作。 #include ssize_t readv(int filedes, const s... 阅读全文
posted @ 2014-03-18 10:05 ITtecman 阅读(1475) 评论(0) 推荐(0) 编辑
摘要: 这两个函数类似于标准的read和write函数,不过需要一个额外的参数。 #include ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);返回:读入或写出字节数——成功;-1... 阅读全文
posted @ 2014-03-18 09:35 ITtecman 阅读(451) 评论(0) 推荐(0) 编辑