linux中有哪些方法可以用C++进行低级磁盘操作?我正在尝试在磁盘上编写自己的数据管理器。例如,我想在Linux环境中创建一个C++程序,在磁盘上分配一定数量(连续)的数据,然后自由地允许我读/写该数据块。我认为我不想使用该标准fstream::open
因为这样文件是由操作系统管理的,我可能无法在磁盘上获得连续的部分。
Thanks.
Generally, "low level" disk operations from user programs1 in Linux involve opening the disk special device. On my computer, these are called names like "/dev/sda" or "/dev/sda4" or even "/dev/disk/by-uuid/2a5150b4-71cb-11e1-b2fe-3b0d270b4e16".
您在选择设备文件时应该非常小心。使用它写入系统分区并不是一个好主意。此外,在大多数情况下,打开设备文件需要 root 访问权限(出于显而易见的原因)。
是否使用的问题fstream
是正交的。您可以使用std::fstream
, fopen
甚至open
打开设备。然后使用与您所做的打开相匹配的任何读取操作。
对于您的具体示例,您可能会重新考虑是否需要此功能。引用维基百科 http://en.wikipedia.org/wiki/Ext3#Defragmentation,这又引用了Linux 系统管理员指南 http://www.tldp.org/LDP/sag/html/filesystems.html:
然而,正如 Linux 系统管理员指南所述,“现代 Linux 文件系统通过将文件中的所有块保持在一起来将碎片保持在最低限度,即使它们不能存储在连续的扇区中。一些文件系统,如 ext3,有效地分配与文件中其他块最近的空闲块。因此不必担心 Linux 系统中的碎片。
1 Since you mention C++, I assume you are writing a user program and not a device driver. Truly "low level" disk operations are available only inside the kernel. If you are, in fact, wanting to write a device driver, please restate your question to make that clear.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)