【发布时间】:2015-01-19 03:17:11
【问题描述】:
我有一个大型存储设备(闪存)通过 PCIe 总线插入到我的计算机上,我想直接访问这样的设备,即它上面没有任何文件系统(例如 NTFS 或 ext4)。
如何使用 C/C++ 做到这一点? (在 Windows 7 和 Linux 上)
我想知道我是否可以 1) 将设备作为文件打开,然后对其读写二进制数据,或者 2) 使用 malloc 之类的函数分配整个设备,然后设备上的每个字节都有一个地址这样我就可以根据地址访问它们。
如果可能的话,我更喜欢第二种方式,但我不知道操作系统是否支持这种方式,因为似乎地址空间需要与主内存共享。
【问题讨论】:
-
不了解 Windows,但
mmap()是您在 Linux 上寻找的。span> -
低级硬件支持是您可以在操作系统的 API 中找到的那种东西,而不是在标准 C/C++ 库中。
-
您手头有操作系统吗?如果是,是哪一个?
-
@πάνταῥεῖ 我有 win7 和 Ubuntu 12.04 服务器
-
@xbug,
CreateFileMapping类似于mmap。这些方法用于文件映射到用户进程的地址空间,与设备无关。