程序未读取整个文件

时间:2019-05-15 03:41:39

标签: c linux windows io

我正在用C编写一个十六进制转储程序。我知道那里有大量的十六进制转储程序,但是我想为这个经验编写一个。我已经在Windows上的CodeBlocks中编写了该程序,但似乎无法正常工作。

我正在读取一个大约137​​,000字节的测试程序,但该程序停在417字节处。现在,当我在Linux上编译代码时(因为它只是一个控制台应用程序,并且使用标准C库),它可以完美工作,并在文件中返回正确的字节数。有谁知道为什么read()在Windows上不起作用,但在Linux上能正常工作?

下面是我如何读取文件的示例。

int main(int argc, char **argv)
{
    if (argc != 2) { return 1; }

    int fd = open(argv[1], O_RDONLY);
    if (fd == -1) { return 1; }

    unsigned char buffer[8];
    unsigned int bytes = 0;
    unsigned int total_bytes = 0;

    while ((bytes = read(fd, buffer, sizeof(unsigned char) * 8)) > 0) {
        ...
        total_bytes += bytes;
    }

    printf("Total Bytes: %d\n", total_bytes);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

我毕竟在这篇文章中找到了答案。但是,他们在使用stdin时遇到了问题。显然,替代字符(1A)与Windows中的CTRL + Z相同,因此在读取该字符时会强制关闭我的程序。

C reading (from stdin) stops at 0x1a character