gpt4 book ai didi

c - MinGW : reading binary data fail

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:47 24 4
gpt4 key购买 nike

我正在尝试使用 MinGW 编译的程序读取 Windows 7 上的二进制文件。二进制文件的大小约为 10M,但我的程序只能读取不到 1000 字节,它认为它已达到 EOF。

这是代码。我确定我在做一些愚蠢的事情,但我似乎无法找到它。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define TS_FILE "foo.data"

int main(void)
{
int fd;
int r;
unsigned char buf[1024];

fd = open(TS_FILE, O_RDONLY|O_BINARY);
printf("fd: %d\n", fd);

if ( fd == -1 )
{
exit(0);
}

for (;;)
{
r = read(fd, buf, 1000);
if ( r != 1000 )
{
printf("read error. %d\n", r);
perror("read");
}

if ( r == 0 )
{
break;
}
}
close(fd);
}

程序会说它读取了 736 个字节,这就是 EOF。

有人能告诉我这是怎么回事吗?谢谢!

谢谢,

最佳答案

事实上,你的程序确实在读取整个文件。它一次读取文件 1000 个字节,直到剩下 736 个字节,在本例中。然后它读取最后的 736 个字节,read 返回 736。您错误地将无法读取完整的 1000 个字节视为错误,但这不是错误。如果 read 失败,则错误条件由返回值为 -1 标记。

你的循环应该更像这样:

for (;;)
{
r = read(fd, buf, 1000);
if (r == -1)
{
printf("read error\n");
perror("read");
exit(1);
}

if (r != 1000)
{
//entire file has been read
break;
}
}
close(fd);

其他几点:

  1. r 的正确类型是 size_t
  2. 与其对 10241000 进行硬编码,您最好使用类似 #define BUFFLEN 1024 的代码,这样您就不会一直重复那些神奇的值(value)。

关于c - MinGW : reading binary data fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10658235/

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