read、write与recv、send的区别

本文详细介绍了recv和send函数的功能及使用方法。这两个函数类似于read和write,但提供了额外的控制选项,如MSG_DONTROUTE、MSG_OOB、MSG_PEEK和MSG_WAITALL等标志,用于实现特定的网络通信需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前边两个上边博客已经做了详细解释了,现在说说后两个库函数。

首先是函数原型:

size_t recv(int sockfd,void *buf,int len,int flags);
size_t send(int sockfd,void *buf,int len,int flags);

recv和send函数提供了和read和write差不多的功能.但是他们提供 了第四个参数来控制读写操作.

前面的三个参数和read,write相同,第四个参数能够是0或是以下的组合:

| MSG_DONTROUTE | 不查找路由表 |
| MSG_OOB | 接受或发送带外数据 |
| MSG_PEEK | 查看数据,并不从系统缓冲区移走数据|
| MSG_WAITALL | 等待任何数据 |

MSG_DONTROUTE:是send函数使用的标志.这个标志告诉IP协议.目的主机在本地网络上面,没有必要查找路由表.这个标志一般用网络诊断和路由程式里面.
MSG_OOB:表示能够接收和发送带外的数据.关于带外数据我们以后会解释的.
MSG_PEEK:是recv函数的使用标志,表示只是从系统缓冲区中读取内容,而不清楚系统缓冲区的内容.这样下次读的时候,仍然是相同的内容.一般在有多个进程读写数据时能够使用这个标志.
MSG_WAITALL:recv函数的使用标志,表示等到任何的信息到达时才返回.使用这个标志的时候recv回一直阻塞,直到指定的条件满足,或是发生了错误.1)当读到了指定的字节时,函数正常返回.返回值等于len 2)当读到了文档的结尾时,函数正常返回.返回值小于len 3)当操作发生错误时,返回-1,且配置错误为相应的错误号(errno)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值