如何使用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