第9章节 数据的IO和复用.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章节 数据的IO和复用

第9章 数据的IO和复用 主要包含如下内容: 介绍常用的IO函数recv()/send()、readv()/writev()、recvmsg()/sendmsg(),并讲解函数的主要应用的场合,例如recvmsg()可以用于接收在多个缓冲区中,可以设置选项。 用几个简单的例子,说明如何使用上述函数进行程序的设计。 介绍常用的几种IO模型,以图形式的方法形象的进行了说明。 介绍select()和pselect()函数、如何使用这两个函数进行文件描述符读写条件的监视。 简单介绍函数poll()和ppoll()的含义、使用和区别。 以简单的例子介绍非阻塞编程的方法。 9.1 IO函数 Linux操作系统中的IO函数主要有read()、write()、recv()、send()、recvmsg()、sendmsg()、readv()、writev()。本节对上述的主要函数进行介绍,其中的read()和write()函数在前面已经介绍过。 9.1.1 使用recv()接收数据 函数recv()用于接收数据,函数原型如下。函数recv()从套接字s中接收数据放到缓冲区buf中,buf的长度为len,操作的方式由flags指定。第一个参数s是套接口文件描述符,它是由系统调用socket()返回的。第二个参数buf是一个指针,指向接收网络数据的缓冲区。第三个参数len表示接收缓冲区的大小,以字节为单位。 #include sys/types.h #include sys/socket.h ssize_t recv(int s, void *buf, size_t len, int flags); 9.1.2 使用send()发送数据 函数send()用于发送数据,函数原型如下。函数send()将缓冲区buf中大小为len的数据通过套接字文件描述符按照flags指定的方式发送出去。当send函数的返回值小于len的时候,表明缓冲区中仍然有部分数据没有成功发送,这时需要重新发送剩余部分的数据。通常的剩余数据发送方法是对原来的buf中的数据位置进行偏移,偏移的大小为以发送成功的字节数。 #include sys/types.h #include sys/socket.h ssize_t send(int s, const void *buf, size_t len, int flags); 9.1.2 使用send()发送数据 9.1.3 使用readv()接收数据 函数readv()可用于接收多个缓冲区数据,函数原型如下。函数readv()从套接字描述符s中读取count块数据放到缓冲区向量vector中 #include sys/uio.h ssize_t readv(int s, const struct iovec *vector, int count); 9.1.3 使用readv()接收数据 9.1.4 使用writev()发送数据 函数writev()可用于接收多个缓冲区数据,函数原型如下。函数writev()向套接字描述符s中写入在向量vector中保存的count块数据。 #include sys/uio.h ssize_t writev(int fd, const struct iovec *vector, int count); 9.1.5 使用recvmsg()接收数据 函数recvmsg()用于接收数据,与recv()函数、readv()函数相比较,这个函数的使用要复杂一些。 1.函数recvmsg()原型含义 2.地址结构msghdr 3.函数recvmsg()用户空间与内核空间的交互 9.1.5 使用recvmsg()接收数据 9.1.6 使用sendmsg()发送数据 函数sendmsg()可用于接收多个缓冲区数据,函数原型如下。函数sendmsg()向套接字描述符s中按照结构msg的设定写入数据,其中操作方式有flags指定。 #include sys/uio.h ssize_t sendmsg(int s, const struct msghdr *msg, int flags); 9.1.7 IO函数的比较 表9.8为上述函数使用时的特点,○标记的为具有此种属性。有如下规律 函数read()/write()和readv()/writev()可以对所有的文件描述符使用;recv()/send()、recvfrom()/writeto()和recvmsg/sendmsg只能操作套接字描述符。 函数readv()/writev()和recvmsg()/sendmsg()可以操作多个缓冲区,read()/write()、recv()/send()和recvfrom()/sendto()只能操作单

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档