c++ - 用于 C++ 的 Linux 中的低级磁盘操作

标签 c++ input fstream hard-drive output

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

谢谢。

最佳答案

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

您应该非常小心地选择您的设备文件。使用它写入您的系统分区不是一个好主意。此外,在大多数情况下打开设备文件需要 root 权限(原因很明显)。

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

对于您的具体示例,您可能会重新考虑是否需要此功能。引用 Wikipedia ,这又引用了 Linux System Administrator Guide :

However, as the Linux System Administrator Guide states, "Modern Linux filesystem(s) keep fragmentation at a minimum by keeping all blocks in a file close together, even if they can't be stored in consecutive sectors. Some filesystems, like ext3, effectively allocate the free block that is nearest to other blocks in a file. Therefore it is not necessary to worry about fragmentation in a Linux system."


1 由于您提到了 C++,我假设您正在编写用户程序而不是设备驱动程序。真正的“低级”磁盘操作只在内核内部可用。如果您实际上想要编写设备驱动程序,请重述您的问题以明确说明。

关于c++ - 用于 C++ 的 Linux 中的低级磁盘操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571596/

相关文章:

c++ - C++ 模板函数中的反向调用

c++ - 使用数组的对象的编译时多态性是否可能?

input - 如何从字符串中提取两个整数?

c++ - 读取结构 vector 并将其写入文件

c++ - 使用 std::filebuf 时检测底层文件的完整性丢失?

c++ - 使用python或c++将xml/html字符串转换为图像

c++ - 为什么我们需要为指针放置 *

c++ - 为什么 cin.getline() 不起作用(C++)?

如果变为空,键盘退格键上的 jQuery 移动到上一个输入字段

c++ - C++中的文件输入/输出