我知道我不应该开始使用 c++ io,整个“类型安全”论点都是转移注意力(有没有人真的发现这是他们最紧迫的问题之一?)。无论如何,我做了,并发现了 ifstreams 和 FILE*s 与普通的旧文件描述符之间的奇怪区别:ifstreams 无法从设备读取。谁能想出原因?
const char* path = "/dev/disk3";
char b;
// this works
FILE* f= fopen(path, "rb");
int i = fread(&b, 1, 1, f); // returns 1, success!
// this does not work
ifstream cf(path, ios::binary);
cf.read(&b, 1);
bool good = cf.good(); // returns false, failure.
最佳答案
对我来说工作正常,它不是你认为的 c++ 流文件 I/O 固有的问题。
也许可以尝试将 ios::in
添加到 openmode 标志中。根据标准的 27.8.1.6,它是 ios::in 所必需的,因此这可能不会做任何事情。
尝试检查实际设置了哪个位 - 而不是调用 good(),尝试分别检查 bad()、eof() 和 fail()。这可能会提供关于错误是什么的线索。
关于c++ - 为什么 C++ ifstream 不能从设备读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/173870/