如何使用 C 编程语言写入硬盘上的任何块?
有一个关于编写MBR的问题,但它并没有太多地涵盖 C 方面。
由于文件描述符 - 正如这个词所说 - 用于文件,我想在这种情况下无法使用它们。所述低级别的I / O包含在C标准库也与filedescriptors实现。
更准确地说:
这个问题是关于写入 HDD 块而不是文件(独立于操作系统)。
上面提到的问题的答案基本上建议在 UNIX 系统上使用dd (coreutils)。这就是为什么我在 C 中寻求一种方法。也许引导加载程序(GRUB)和引导扇区病毒使用不同的技术?
我想更改文件描述符内的实际指针不是合法的方式。
问题和限制:
我知道有一些方面需要牢记,例如
这个问题更多的是理论性的。
C 语言可以访问带有函数fopen/fclose/fread/fwrite等的文件。但是语言中没有块设备这样的东西(就此而言,甚至不是设备)。
另一方面,POSIX 具有open/close/read/write访问文件的低级功能,并具有块设备的概念。这些函数可以(小心)用于块设备,只要您遵循一些简单的规则(主要是块对齐)并且您知道设备的名称 ( /dev/xxx)。
如果您在非 POSIX 系统中,例如 Windows,那么操作系统将有特定的方式来处理块设备访问。在Windows中,例如,你可以使用CreateFile功能与设备的名称\\.\PhysicalDrive0,\\.\C:或者这样的。