- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第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()只能操作单
您可能关注的文档
- 第3章节集成运算放大器及其应用.ppt
- 第4章节 100M快速以太网组网技术.ppt
- 第4章节 CSS的单位.ppt
- 第3章节决策.ppt
- 第4章节 个性心理2.ppt
- 第4章节 Linux网络接口配置.ppt
- 第4章节 互联网协议IP.ppt
- 第3章节:标高与轴网.pdf
- 第4章节 MATLAB在信号处理中的应用.ppt
- 第3章节静定结构的内力计算.ppt
- 2025-2026年度国内抗酸药及治疗消化性溃疡和胃肠胀气用药市场发展规划及投资前景咨询报告.doc
- 2025-2026年度第一学期园务计划.doc
- 2025-2026年度第一学期学校工作计划.docx
- 2025-2026年度口服轮状病毒活疫苗市场深度分析及产业链投资价值研究咨询报告.doc
- 高考历史一轮复习 世界史 第03讲 走向整体的世界(原卷版).docx
- 高考历史一轮复习 世界现代史单元检测(学生版).docx
- 高考历史一轮复习 世界史 第03讲 走向整体的世界(解析版).docx
- 中考数学总复习第七模块图形的变化练习题整理.docx
- 《幼儿园管理条例》专业解读课件.pptx
- 人教版二年级数学上册第一二单元综合素质达标测试题课件.pptx
文档评论(0)