Linux for C++中的低级别磁盘操作
Low level disk operations in 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::fstream
、fopen
甚至open
打开设备。然后使用与您所做的打开操作相匹配的任何读取操作。
对于您的特定示例,您可能会重新考虑是否需要此功能。引用维基百科,而维基百科又引用了Linux系统管理员指南:
但是,正如《Linux系统管理员指南》所述,"现代Linux文件系统通过将文件中的所有块紧密地放在一起,即使它们不能存储在连续的扇区中,也能将碎片降到最低。一些文件系统,如ext3,可以有效地分配离文件中其他块最近的可用块。因此,不必担心Linux系统中的碎片。">
1既然你提到C++,我认为你在写一个用户程序,而不是设备驱动程序。真正的"低级别"磁盘操作仅在内核内部可用。事实上,如果你想写一个设备驱动程序,请重述你的问题以明确这一点。
我不知道使用标准Linux文件系统有任何方法可以做到这一点。我认为您必须有一个单独的分区,并直接对其dev
伪文件(例如/dev/sda2
)进行I/O。
您应该使用系统调用。这里有一个列表:linux系统调用
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 对字符串进行位操作
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 位移操作和位掩码未检测到重复字符
- 如何进行特定的位操作?
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 字符串操作 - 字符计数
- Linux for C++中的低级别磁盘操作
- 如果并行执行,磁盘文件操作是否更快
- 如何在C/C++中使用stdio文件操作时检测磁盘空间不足
- 重复磁盘写操作