我试图从服务器读取消息(字符串/文本),并且我将缓冲区大小设置得非常大(buffer_size = 1000),这样我只需要从服务器读取一次。
所以我的问题是,如果消息正好是10个字节,我调用read(socket,buffer,buffer_size),那么它是否只会读取10个字节,因为它小于实际的缓冲区大小?我想我只是对通话的行为感到好奇,以防所读取的内容实际上没有预期的那么多。
此外,如果我再次调用read(),它是否会覆盖缓冲区中的内容?我的意思是清空缓冲区并用新输入覆盖它。
答案 0 :(得分:2)
您可能使用TCP(流媒体协议) - 不发送消息边界,只发送字节流。因此,即使服务器执行单次写操作,您最终也可能需要执行多次读取才能获取数据。
继续阅读,直到你有足够的字节,或者读取返回0(这意味着EOF)。
如果读取得到N个字节,并且还不够,则需要发出另一个读取目标缓冲区+ N.
答案 1 :(得分:1)
答案 2 :(得分:0)
read(int fd, void *buffer, size_t count)
函数会将count
字节从文件描述符fd
读取到buffer
,因此如果只有10 bytes
进行读取,它只会阅读10 bytes
。不,它不会清空buffer
并覆盖它的内容,它只会覆盖从文件描述符中读取的字节。