Linux 中 C++ 的低级磁盘操作

2023-12-21

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(使用前将#替换为@)

Linux 中 C++ 的低级磁盘操作 的相关文章

  • clang 格式换行符在错误的位置

    给出以下代码行 get abc manager get platform status abc platform status sw update status fill update status actions allowed stat
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 角度 4 单击按钮功能未触发

    我正在尝试检查文本输入是否为空或不在角度 4 中 我没有为此使用表单 这只是一个输入字段 当我在下面的按钮中执行 addLocaton 函数时 需要进行检查 我的输入字段
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • [decl.constexpr].5 到底是什么意思?

    该标准关于常量表达式函数 decl constexpr 第 5 点规定 对于非模板 非默认 constexpr 函数或非模板 非默认 非继承 constexpr 构造函数 如果不存在参数值 则函数或构造函数的调用可以是核心常量的计算子表达式
  • 导出到 Excel 不适用于 SSL (https) 下的 IE

    我一直在尝试修复安全网站 https 上的某些内容 该网站是一个生成 CSV 文件的 导出到 Excel 按钮 它适用于 Firefox Chrome 等 但不适用于 Internet Explorer 我已经更改了标头 消除了无缓存 还编
  • 自移动批处理文件

    我正在寻找一种方法让批处理文件在执行后将其自身移动到已知位置 自动移动 似乎是最恰当的名字 但我确信它有一个技术术语 我想移动批处理文件after所有其他代码都已运行 move C temp move me bat D temp move
  • 溢出的签名/未签名作业及其结果

    我正在阅读 Stroustrup 的书 C 编程语言第 4 版 并且有三个关于溢出赋值的问题 特别是对有符号 无符号字符 如书中所示 首先 根据标准5 4段 如果在计算表达式时 结果不是 数学定义或不在可表示值的范围内 它的类型 行为未定义
  • HTML5 svg 不工作

    我使用的是 Chrome 版本 5 0 375 55 和 Firefox 版本 3 5 9 但我无法获取下面的 HTML5 代码来显示一个框
  • VBA/VB6 集合到底是什么?

    对于整数键 索引速度为O N 所以看起来它是一个列表 但显然 wqw 的评论无法在 VB6 For Each 循环中正确循环键和值 https stackoverflow com q 57066954 1261153 字符串键的访问时间是O
  • subversion authz 路径包含空格

    如何为包含空格的路径设置 authz 文件 我尝试了各种方法来逃离这个空间 但都不起作用 some path some 20path some path some path 我刚刚检查了 svn 源代码和文件解析器 在 libsvn sub
  • 词干提取的逆过程

    我使用 lucene 雪球分析器来执行词干提取 结果是没有意义的话 我提到了这个question https stackoverflow com questions 190775 stemming algorithm that produc
  • 电话格式的 HTML 电话链接 [重复]

    这个问题在这里已经有答案了 我正在为手机制作一个 html 链接 这就是我所拥有的 a href 1 888 888 8888 a 手机会识别这一点 还是我需要将其更改为 a href 1 888 888 8888 a uri 中允许使用视
  • ASP.Net Core 上具有自动再生功能的内存缓存

    我想没有内置的方法可以实现这一点 我有一些缓存数据 需要始终保持最新 间隔几十分钟 它的生成大约需要 1 2 分钟 因此有时会导致请求超时 为了优化性能 我将其放入内存缓存中 使用Cache GetOrCreateAsync 所以我确信可以
  • Haskell 中的随机整数 [重复]

    这个问题在这里已经有答案了 我正在学习 Haskell 并学习我想生成一个随机的 Int 类型 我很困惑 因为下面的代码有效 基本上 我想要一个 Int 而不是 IO Int 在 ghci 中 这是有效的 Prelude gt import
  • 如何使用 Spring Cloud 和 Netflix OSS 在微服务之间路由

    在使用 Spring Cloud 开发微服务期间 我们开始使用 Zuul 作为从外部到微服务的任何连接以及任何需要联系另一个微服务的微服务的代理 一段时间后 我们得出结论 Zuul 被设计为边缘服务 仅代理从外部到微服务的流量 并且不应用于
  • 如何在AWS Lambda上使用tabula阅读pdf?

    我知道我们必须下载 Java 才能运行 我在 IDE 上执行了该操作 并且成功了 但不知道如何在 AWS Lambda 上下载它 如果有人能帮助我 我将不胜感激 我认为代码本身产生了我所期望的结果 但是 java正是我所需要的 这是我收到的
  • 将 GKE 服务帐户凭据与 kubectl 结合使用

    我正在尝试从 CI 系统中调用 kubectl 我希望使用谷歌云服务帐户进行身份验证 我有一个秘密管理系统 可以将秘密注入到我的 CI 系统中 但是 我的 CI 系统没有安装 gcloud 我不想安装它 它只包含 kubectl 有什么方法
  • Azure AD B2C 令牌返回名称,但 User.Identity.Name 为 null

    我有一个 Azure AD B2C 令牌 它似乎可以正确返回当前登录的用户名 这是 jwt ms 的屏幕截图 我在登录后使用它来解码应用程序返回的令牌 但是 然后我尝试使用 User Identity Name in my Layout c
  • 关于Javascript中的“5”-1和“5”+1(加号和减号)[重复]

    这个问题在这里已经有答案了 我读了一本关于 Javascript 运算符的书 这让我很困惑 console log 5 1 这将使 5 成为一个字符串 所以结果是51 console log 5 1 这个结果将是4 我知道它会转换 5 to
  • 在 VSTS 中设置 GitFlow - 最佳实践?

    有没有关于如何使用 Visual Studio TeamServices 设置 GitFlow 的建议 我们来自 BitBucket 那里只是一个简单的初始化 但在VSTS中我们找不到任何脚手架 看来我们必须进行很多手动设置 对吗 那么如何
  • 捕获滚动​​溢出:隐藏元素

    假设您有一个隐藏了溢出的元素 是否可以在不滚动的情况下捕获该元素上的鼠标滚动 我问这个的原因是 我有一个单页设计的网站 我编写了一个脚本 当您向下或向上滚动时 该脚本会自动滚动到下一个位置 但有一些我不想要的东西 当他们尝试滚动时 页面实际
  • 共同的初始序列和比对

    在思考反例时这个问题 https stackoverflow com q 21499120 420683 我想出了 struct A alignas 2 char byte 但如果这是合法和标准布局 它的布局是否与此兼容struct B s
  • Linux 中 C++ 的低级磁盘操作

    linux中有哪些方法可以用C 进行低级磁盘操作 我正在尝试在磁盘上编写自己的数据管理器 例如 我想在Linux环境中创建一个C 程序 在磁盘上分配一定数量 连续 的数据 然后自由地允许我读 写该数据块 我认为我不想使用该标准fstream