Linux中存在哪种方法用于C ++中的低级磁盘操作?我试图在磁盘上编写自己的数据管理器。例如,我想在Linux环境中创建一个C ++程序,在磁盘上分配一定量(连续),然后自由地允许我读/写该数据块。我认为我不想使用标准fstream::open
,因为该文件由操作系统管理,我可能无法在磁盘上获得连续的部分。
感谢。
答案 0 :(得分:5)
通常,Linux中用户程序 1 的“低级”磁盘操作涉及打开磁盘特殊设备。在我的计算机上,这些名称如“/ dev / sda”或“/ dev / sda4”或甚至“/ dev / disk / by-uuid / 2a5150b4-71cb-11e1-b2fe-3b0d270b4e16”。
您应该非常谨慎地选择设备文件。使用它写入系统分区不是一个好主意。此外,在大多数情况下,打开设备文件需要root访问权限(出于显而易见的原因)。
是否使用fstream
的问题是正交的。您可以使用std::fstream
,fopen
甚至open
来打开设备。然后使用与你所做的开放匹配的任何读操作。
对于您的具体示例,您可能会重新考虑是否需要此功能。引用Wikipedia,然后引用Linux System Administrator Guide:
但是,正如“Linux系统管理员指南”所述,“现代Linux文件系统通过将文件中的所有块保持在一起,即使它们不能存储在连续的扇区中,也能将碎片保持在最低限度。某些文件系统,像ext3一样,有效地分配最接近文件中其他块的空闲块。因此,不必担心Linux系统中的碎片。“
1 由于您提到C ++,我假设您正在编写用户程序而不是设备驱动程序。真正的“低级”磁盘操作仅在内核中可用。事实上,如果您想要编写设备驱动程序,请重新提出您的问题以明确说明。
答案 1 :(得分:1)
我不知道使用标准Linux文件系统做任何方法。我认为您必须有一个单独的分区,并直接在其dev
伪文件(例如/dev/sda2
)上执行I / O.
答案 2 :(得分:-2)
您应该使用系统调用。这里有一个列表:linux system calls