c++ - 为什么 C++ ifstream 不能从设备读取?

标签 c++ macos gcc fstream

我知道我不应该开始使用 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/

相关文章:

c++ - Pthreads 将 void * 参数转换为 int 数组

macos - 安装 Google Go 和 App Engine SDK 的正确方法是什么?

macos - 使用 NSWorkspace.openURL 打开 URI 时捕获弹出窗口

c++ - 递归嵌套模板——gcc 错误?

c# - 将 C++ 转换为 C#

C++ vector : push_back Objects vs push_back Pointers performance

c++ - Windows下的HDF5作为动态链接库Qt/C++

c++ - Mac OSX 构建中缺少 Allegro 5.2 TTF 插件

c++ - dlclose() 不适用于工厂函数和函数中的复杂静态?

c - sched_setaffinity 和 glibc - 交叉编译