c/c++语言开发共享C语言中的低级写作

如何使用C编程语言写入硬盘上的任何块?

关于编写MBR有一个问题 ,但它没有涵盖C方面那么多。

由于文件描述符 – 正如文字所说 – 对于文件,我想在这种情况下没有办法使用它们。 C标准库中包含的低级I / O也使用filedescriptors实现。

更准确地说:
这个问题更像是编写HDD块而不是文件(独立于操作系统)。

上面提到的问题的答案基本上建议在UNIX-Systems上使用dd (coreutils)。 这就是我在C中寻求一种方式的原因。也许bootloaders( GRUB )和引导扇区病毒使用不同的技术?

我想改变文件描述符内部的实际指针并不合法。

问题和局限:
我知道要记住某些方面,例如

这个问题更具理论性。

    C语言可以访问具有fopen/fclose/fread/fwrite等函数的文件。但是语言中没有块设备 (甚至不是设备 )。

    另一方面,POSIX具有低级functionopen/close/read/write以访问文件,并具有块设备的概念。 只要您遵循一些简单的规则(主要是块对齐)并且您知道设备的名称( /dev/xxx ), 可以(小心)使用这些函数用于块设备。

    如果您在非POSIX系统(例如Windows)中,则操作系统将具有处理块设备访问的特定方式。 例如,在Windows中,您可以使用CreateFile函数和设备名称\.PhysicalDrive0\.C:等。

    对于类Unix操作系统,这是一个非问题:硬盘是一个设备文件,就像任何其他文件一样,并且像任何其他文件一样被访问。 你得到一个文件描述符,你找,你写,你崩溃文件系统,一切都很好。

    这意味着您也应该使用C中的普通文件I / O例程。 区分高级和低级I / O不是你的工作,而是操作系统的工作。 因为现在大多数操作系统都支持设备即文件的比喻,所以C中没有进一步的抽象。虽然这种方法可能不适用于DOS和衍生物,但这只是避免DOS避免维护过时代码的一个原因。

    如果你想让操作系统独立,那么你可能想要使用某种多态性。 然后,您可以创建一个结构来支持您所需的function。

    在哪里创建一个结构,然后包含指针的函数,当代码移动OS时可以更改这些函数。 然后,您需要为要支持的每个操作系统提供基于操作系统的实现。

    这与C几乎没有任何关系。如何以编程方式访问硬件取决于CPU如何与该设备通信(即在系统/硬件架构/设计上),如果涉及任何操作系统,则如何操作系统允许其中运行的其他软件访问设备(如果有的话)。

    在x86 PC上,如果没有运行OS,可以使用BIOS中断13hfunction来读写HDD扇区。 在不使用BIOS的情况下,可以使用众所周知的I / O端口和ATA(PI)命令来实现相同目的。 如果有DOS,它大致相同,硬件访问没有限制。 如果有Windows或Linux,除非您拥有足够的权限和/或以某种方式执行操作,否则操作系统不会让您执行此类操作。

    open()close()read()write()不是C语言的一部分,它们是OS的一部分。

    除此之外:write()不会写任何东西,它是一个系统调用, 要求操作系统为你编写它 。 操作系统可以使用此请求执行任何操作(例如忽略它)

    / dev / *条目只是机器私有部分的一个钩子,由操作系统提供给您,使您可以执行其他操作无法完成的操作。 但是当您打开()并写入()其中一个/ dev / disk设备时,操作系统仍然可以忽略您的请求。

      以上就是c/c++开发分享C语言中的低级写作相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560387.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐