gpt4 book ai didi

c++ - unistd.h read() 正在读取更多数据然后被写入

转载 作者:太空宇宙 更新时间:2023-11-04 15:28:55 24 4
gpt4 key购买 nike

我正在从命名管道读取/写入数据。在写入方面,它表示它正在写入一个常量 110 字节。在读取方面,大部分时间它说它正在读取 110 个字节,这是正确的,但其他时候它说它正在读取 220 个字节或 330 个字节。这是正确的,因为当我打印它时,它是在同一个 read() 中连续打印两次或三次相同的消息。在下面的阅读代码中,我是否在使用 memset 清除字符时做错了什么?我想不出任何其他方式,它读取的内容比写入的内容多,除非缓冲区中有剩余内容。

int fd1, numread;
char bufpipe[5000];

while(1)
{
fd1 = open("/tmp/testPipe", O_RDONLY);
numread = read(fd1,bufpipe, 5000);//->this should always be 110
if(numread > 1)
{
printf("READ: %i", numread);
bufpipe[numread+1] = '\0';
memset(bufpipe,'\0',5001);
close(fd1);
}
}

最佳答案

这个:

memset(bufpipe,'\0',5001);

正在覆盖一个字节,因为你只有 5000 字节。

但主要的“问题”是 read(..., 5000) 将始终尽可能多地读取最多 5000 字节 - 您似乎假设它只会读取就像作者一口气写的一样,这是不正确的。如果写入器在两次读取之间写入两个 110 字节的数据包,那么读取器读取 220 字节是完全正确的。

如果您一次只需要读取一个数据包,则必须使您的数据包具有自描述性。因此,例如,前四个字节包含后面的字节数。然后,您可以通过读取四个字节,将其转换为整数,然后读取该数量的数据字节来读取单个数据包。

关于c++ - unistd.h read() 正在读取更多数据然后被写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com