c - 程序不读取整个文件

标签 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;
}

最佳答案

我终于在这篇文章中找到了答案。不过,他们遇到了 stdin 的问题。显然替换字符 (1A) 与 Windows 中的 CTRL+Z 相同,因此在读取该字符时强行关闭我的程序。

C reading (from stdin) stops at 0x1a character

关于c - 程序不读取整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56141449/

相关文章:

C 指针回文算术

c++ - c/c++ 和 objective c ios

linux - 在目录上使用 ldd 命令时,如何只显示动态链接的可执行文件?

linux - 使用 CloudFormation 自动创建 Linux 用户密码

windows - 使用批处理文件从不同时区获取本地时间

c - 如何在用 C 编写的 CGI 应用程序中使用系统命令执行批处理脚本,通过 Web 浏览器(Apache 服务器)执行

c - 将 scanf 与 3 个输入变量一起使用时出现段错误

使用 fork() 创建 "background running" child 并用信号杀死他们中的每一个

c++ - 使用 ICU_REJECT_USERPWD 标志集调用 WinHttpCreateUrl 在 Windows 7 中工作,但在 Windows XP 中不工作(使用虚拟 PC)

windows - 如何从启动任务访问Azure本地存储?