首页 > 解决方案 > 程序未读取整个文件

问题描述

我正在用 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;
}

标签: clinuxwindowsio

解决方案


毕竟我已经在这篇文章中找到了答案。不过,他们遇到了标准输入问题。显然替代字符(1A)与 Windows 中的 CTRL+Z 相同,因此在读取该字符时它强制关闭了我的程序。

C 读取(从标准输入)在 0x1a 字符处停止


推荐阅读