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访问权限(原因很明显)。

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

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

但是,正如《Linux系统管理员指南》所述,"现代Linux文件系统通过将文件中的所有块紧密地放在一起,即使它们不能存储在连续的扇区中,也能将碎片降到最低。一些文件系统,如ext3,可以有效地分配离文件中其他块最近的可用块。因此,不必担心Linux系统中的碎片。">


1既然你提到C++,我认为你在写一个用户程序,而不是设备驱动程序。真正的"低级别"磁盘操作仅在内核内部可用。事实上,如果你想写一个设备驱动程序,请重述你的问题以明确这一点。

我不知道使用标准Linux文件系统有任何方法可以做到这一点。我认为您必须有一个单独的分区,并直接对其dev伪文件(例如/dev/sda2)进行I/O。

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

最新更新