c - 程序未读取整个文件
问题描述
我正在用 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;
}
解决方案
毕竟我已经在这篇文章中找到了答案。不过,他们遇到了标准输入问题。显然替代字符(1A)与 Windows 中的 CTRL+Z 相同,因此在读取该字符时它强制关闭了我的程序。
推荐阅读
- python - 带有字典值或键的 Python fillna
- github - Markdown 不显示我的 mp4 本地视频
- notifications - 在 Laravel 6 中使用队列发送 ResetPassword 通知 - 错误属性“视图”
- laravel-7 - 从 laravel 中的中间表获取数据
- pyspark - Sum() 和 count() 在 pyspark2 中不能与 agg 一起使用
- airflow - 气流:重新运行 DAG 无法加载以前运行的 XCOM
- memory-leaks - Dart Stream.periodic 内存泄漏
- python - 如何在使用 keras 的神经网络中输入一个包含 n 个项目的数组并输出一个大小为 k 的数组?
- python - 从python中定义的类调用函数?
- c++ - Visual Studio - 代码在发布但不在调试(C++)