Linux for C ++中的低级磁盘操作

在Linux中,C ++中的低级磁盘操作有哪些方法? 我试图在磁盘上写入自己的数据管理器。 例如,我想在Linux环境中创建一个C ++程序,该程序在磁盘上分配一定数量(连续的),然后自由地允许我读取/写入该数据块。 我不认为我想使用标准的fstream::open因为这个文件是由操作系统管理的,我可能没有在磁盘上获得连续的部分。

谢谢。


通常,Linux中用户程序1的“低级”磁盘操作涉及打开磁盘专用设备。 在我的计算机上,这些被称为“/ dev / sda”或“/ dev / sda4”或甚至“/ dev / disk / by-uuid / 2a5150b4-71cb-11e1-b2fe-3b0d270b4e16”。

您应该非常小心选择设备文件。 用这个写入你的系统分区不是一个好主意。 另外,在大多数情况下,打开设备文件需要root权限(出于显而易见的原因)。

是否使用fstream的问题是正交的。 你可以使用std::fstreamfopen甚至open来打开设备。 然后使用任何与您所做的公开操作相匹配的读取操作。

对于您的具体示例,您可能会重新考虑是否需要此功能。 引用维基百科,这又引用了Linux系统管理员指南:

但是,正如“Linux系统管理员指南”所述,“现代Linux文件系统通过将文件中的所有数据块保持在一起,即使它们不能存储在连续的扇区中,也可以保持最低限度的分段。一些文件系统,如ext3,有效地分配与文件中其他块最接近的空闲块,因此不必担心Linux系统中的碎片。“


1既然你提到C ++,我假设你正在编写一个用户程序而不是设备驱动程序。 真正的“低级”磁盘操作仅在内核中可用。 实际上,如果你想写一个设备驱动程序,请重新提出你的问题来说明问题。


我不知道有什么办法可以使用标准的Linux文件系统来做到这一点。 我认为你必须有一个单独的分区,并直接在其dev虚拟文件(例如/dev/sda2 )上执行I / O操作。


你应该使用系统调用。 这里有一个列表:linux系统调用

链接地址: http://www.djcxy.com/p/11479.html

上一篇: Low level disk operations in Linux for C++

下一篇: Defining the material conditional in Prolog