Linux 上 C 程序无需 FS 即可直接访问硬盘
- 2024-11-08 09:04:00
- admin 原创
- 33
问题描述:
我想通过 C 程序直接访问整个硬盘。硬盘上没有 FS,而且永远不会有。
我只想打开 /dev/sda(例如)并在磁盘的块/扇区级别执行 I/O。
我打算在 Linux 环境中编写一些程序来学习 C 编程(我懂 C 语言、Python、Perl 和 Java)但对 Linux 环境缺乏信心。
为了学习目的,我正在考虑使用 kyoto-cabinet 并将计算出的哈希值对应的值直接保存到硬盘的“块/扇区”中,将“哈希,块/扇区引用”对记录到 kyoto-cabinet 哈希数据库文件中。
我不知道使用标准 CI/O 函数是否可行,否则我必须编写“设备驱动程序”或类似的东西......
解决方案 1:
如其他地方所述,在 *NIX 系统下,块设备/dev/sda
可以作为纯文件访问。请注意,如果从设备安装文件系统,则将其作为文件打开进行写入将会失败。
如果你想使用块设备,我建议首先使用loop device
,它将纯文件显示为块设备。例如:
dd if=/dev/zero of=./loop_file_10MB bs=1024 count=10K
losetup /dev/loop0 $PWD/loop_file_10MB
此后,/dev/loop0
它将表现得像一个块设备,但所有写入的信息都将存储在文件中。
解决方案 2:
由于驱动器的设备文件(例如/dev/sda
)是块设备,这意味着您可以像普通文件一样打开、查找和使用该文件。
解决方案 3:
是的,正如其他人所说,您可以简单地打开块设备。
但是,在块边界和整个块上执行 IO(无论如何写入)确实是一个好主意。您可以使用诸如 pread() 和 pwrite() 之类的东西来执行这些 IO,或者 mmap 部分或全部设备。
有许多 ioctl 可供使用,请参阅“man sd”了解更多信息。它们似乎没有全部记录在同一个地方。
在 linux/fs.h 中定义了 BLKROSET 和一堆其他 ioctl,您必须四处查看才能了解如何使用它们。您可以做一些有用的事情,例如找出设备有多大以及块大小是多少。
util-linux-ng 包的源代码是您的朋友,它包含示例。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件