C/C++ 中的 Read() - 关于读取与缓冲区大小
Read() in C/C++ - regarding what is read vs buffer size
我正在尝试从服务器读取消息(字符串/文本),并且我将缓冲区大小设置得非常大(buffer_size = 1000),以便我只需要从服务器读取一次。
所以我的问题是,如果消息正好是 10 个字节,并且我调用 read(socket、buffer、buffer_size),那么它是否只会读取 10 个字节,因为它小于实际缓冲区大小?我想我只是对调用的行为感到好奇,以防读取的内容实际上不如预期
。另外,如果我再次调用 read(),它会覆盖缓冲区中的内容吗?我的意思是清空缓冲区并用新输入覆盖它。
您可能使用的是TCP,这是一种流式处理协议 - 不发送消息边界,仅发送字节流。因此,即使服务器执行单次写入,您最终也可能需要执行多次读取才能获取数据。
继续读取,直到有足够的字节,或者读取返回 0(这意味着 EOF)。
如果读取获得 N 个字节,但这还不够,那么您需要发出另一个读取目标缓冲区 + N。
請閱讀 man of read
截至
另外,如果我再次调用 read(),它会覆盖缓冲区中的内容吗?我的意思是清空缓冲区并用新输入覆盖它。
好吧,读取将覆盖buff,但不会为您进入空缓冲区,您必须自己做。
read(int fd, void *buffer, size_t count)
函数将从文件描述符fd
读取多达 count
个字节到 buffer
中,因此如果只有10 bytes
用于读取,则只会读取10 bytes
。不,它不会清空buffer
并覆盖其内容,它只会覆盖从文件描述符读取的字节。
相关文章:
- 套接字读取后,我在缓冲区中看到意外输入
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 读取缓冲区时访问冲突 UNICODE_STRING
- ifstream 不读取缓冲区
- Unix 读取缓冲区参数
- 从超强的AndroidAudioIO输入读取缓冲区
- C++ / RS232C 串口 / 事件回调异步读取缓冲区 / 不使用线程
- QTCPSOCTED数据传输在读取缓冲区已满时停止,并且在释放时不会恢复
- 读取缓冲区
- 为什么无法使用glReadPixel()读取Z缓冲区
- ClearCommError中的串行通信在读取缓冲区中找不到任何数据
- 提升asio读取缓冲区
- 正在读取缓冲区C/C++
- ostringstream 运算符 [] 在尝试读取缓冲区时给出编译错误
- 为什么boost::asio::读取缓冲区数据大小小于读取大小
- 使用C++AMP读取缓冲区数据
- TCP套接字:传入数据在ack之后(离开TCP读取缓冲区)但在read()/recv()之前的位置
- 我正在尝试尽快逐行读取缓冲区
- 文件io-C++读取缓冲区大小
- 逐字符从管道读取缓冲区/查找管道中数据的大小