使用C/C++访问RAW磁盘

Blo*_*oon 4 c c++ linux windows disk

我有一个大型存储设备(闪存)通过PCIe总线插入我的计算机,我想直接访问这样的设备,即没有任何文件系统(例如,NTFS或ext4).

我怎么能用C/C++做到这一点?(在Windows 7和Linux上)我想知道我是否可以1)打开设备作为文件,然后读取和写入二进制数据,或2)使用某些函数分配整个设备malloc,然后每个字节设备有一个地址,以便我可以根据地址访问它们.

如果有可能,我更喜欢第二种方式,但我不知道操作系统是否支持这一点,因为看起来地址空间需要与主内存共享.

mcl*_*sen 10

根据Microsoft 文档:

在Windows上,您可以CreateFile使用表单的路径打开物理驱动器

\\.\ PhysicalDriveN

N设备号在哪里或使用表单路径的逻辑驱动器

\\.\X:

您需要以扇区大小的倍数进行搜索,读取和写入,可以使用DeviceIoControl()IOCTL_DISK_GET_DRIVE_GEOMETRY 进行检索.


Sam*_*hik 7

在Linux上,每个存储设备最终都会在/ dev中获取设备条目.第一存储设备通常/dev/sda是第二存储设备(如果存在的话)/dev/sdb.请注意,光盘是存储设备,因此CD-ROM或DVD-ROM驱动器(如果存在)将获得设备节点条目.

某些Linux发行版可能使用不同的命名约定,但这通常是它.因此,您需要确定哪个设备对应于您的闪存盘,然后只需打开/dev/sdX设备,然后只需从中读取和写入即可.您的读取和写入必须是偶数块(扇区)大小,并且查找打开的文件将控制后续读取或写入将影响的磁盘块/扇区.

通常,/dev/sdX将由root拥有,但通常有一些特定于Linux发行版的方法来摆弄拥有特定设备节点的用户标识.