从缓冲区发送消息时,缓冲区会自动清除吗?
Posted
技术标签:
【中文标题】从缓冲区发送消息时,缓冲区会自动清除吗?【英文标题】:when sending a message from the buffer is the buffer automatically cleared? 【发布时间】:2021-06-05 02:59:25 【问题描述】:我正在尝试为套接字编写代码,我首先读取 stdin
并发送到套接字,然后从所述套接字读取以发送到 stdout
到目前为止,我有一些看起来或多或少像的东西这个(在你攻击我之前我也不知道我为什么要这样做):
void read_write(int socket_descriptor_file)
int n = 1;
char buffer_in[1024];
while(n>0)
n = fread(&buffer_in,sizeof(buffer_in),1, stdin);
if(n==0) break;
ssize_t sent_status = send(socket_description_file, buffer_in, sizeof(buffer_in), 0);
if(sent_status == -1)
printf("nothing sent");
ssize_t receive_status = recv(socket_descriptor_file,buffer_in,sizeof(buffer_in), 0);
if(receive_status == -1)
printf("nothing received ");
fwrite(&buffer_in,sizeof (char), sizeof(buffer_in), stdout);
fflush(stdout);
我不确定应用发送函数时是否会自动清除上述缓冲区,以便我可以使用缓冲区存储来自recv
函数的消息。
这段代码的目的是模拟主机 1 和主机 2 之间的聊天。因此需要立即发送处理消息。
我显然也应该使用 poll 功能,但我真的不知道如何使用它。
我对这个主题不是很了解,所以如果我的代码有任何进一步的问题,请告诉我。我很高兴听到他们的声音:)
【问题讨论】:
您传递给send
的数组只是内存中的字节。它没有被清除; send
不会擦除它或将其元素设置为零,也没有必要这样做。 send
也不会保留地址并在将程序控制权返回给您后继续使用它。您可以在内存中为 recv
使用相同的字节。
【参考方案1】:
缓冲区只是内存。并且在成功调用发送内容后不再需要。所以可以重用recv的缓冲区。可能您希望将接收到的字节数 (reveive_status) 存储到文件中,而不是缓冲区的大小。
【讨论】:
以上是关于从缓冲区发送消息时,缓冲区会自动清除吗?的主要内容,如果未能解决你的问题,请参考以下文章