我正在用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;
}
答案 0 :(得分:1)
我毕竟在这篇文章中找到了答案。但是,他们在使用stdin时遇到了问题。显然,替代字符(1A)与Windows中的CTRL + Z相同,因此在读取该字符时会强制关闭我的程序。