c - 在 Linux 上从 C 程序直接访问没有 FS 的硬盘

标签 c linux hard-drive

我想直接从 C 程序访问整个硬盘。上面没有 FS,也永远不会是一个。

我只想打开/dev/sda(例如)并在磁盘的 block /扇区级别执行 I/O。

我打算在Linux环境下写一些学习C编程的程序(我会C语言、Python、Perl和Java),但对Linux环境缺乏信心。

为了我的学习目的,我正在考虑使用 kyoto-cabinet 并将与计算的哈希对应的值直接保存到硬盘的“ block /扇区”中,记录对:“哈希, block /扇区引用"到 kyoto-cabinet 哈希数据库文件中。

我不知道使用标准 C I/O 函数是否可行,否则我必须编写“设备驱动程序”或类似的东西...

最佳答案

如其他地方所述,在 *NIX 系统下,像 /dev/sda 这样的 block 设备可以作为普通文件访问。请注意,如果文件系统是从设备挂载的,则将其作为文件打开以进行写入将失败。

如果你想玩 block 设备,我建议先使用 loop device ,它将普通文件呈现为 block 设备。例如:

dd if=/dev/zero of=./loop_file_10MB bs=1024 count=10K
losetup /dev/loop0 $PWD/loop_file_10MB

在那之后,/dev/loop0 就像一个 block 设备一样,但所有写入的信息都将存储在文件中。

关于c - 在 Linux 上从 C 程序直接访问没有 FS 的硬盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3520459/

相关文章:

c - 在 C 中的 "__' 行和 '___' 列之后停止数组?

Linux:将命令的输出重定向到 "find"

linux - 在Ubuntu中增加HD空间

c++ - 如何提高多相机设置的写入速度?

CS50 PSet4 - 模糊滤镜,我得到黑色图像作为输出

c - 是否可以 LD_PRELOAD 具有不同参数的函数?

c - 在转换为 int ** 后取消引用指针如何更改它指向的值?

linux - Git为每次推送输入长密码

linux - 带有 Zenity 的 Shell 脚本

linux - 如何在linux上用C控制硬盘电机速度?