【问题标题】:Retrieving the starting memory addresses of the blocks of a file检索文件块的起始内存地址
【发布时间】:2012-03-05 12:08:28
【问题描述】:

一个硬盘被分成块,存储在硬盘上的每个文件都被分成那个大小的块并存储在硬盘上。

例如
考虑一个 1MB 的文件,块大小为 512 字节,那么文件的第一个块存储在0x121454,第二个块存储在0x846132
我需要获取0x1214540x846132。我想使用 Java。
如果不在Java中,那么可以使用C吗?如果是这样,我可以在 jni 的帮助下实现它。

在linux中的inode块有所有内存地址的详细信息,但不知道window。

【问题讨论】:

标签: java c operating-system


【解决方案1】:

你不能在纯 Java 中做到这一点。

您可能也无法在 C/C++ 中执行此操作...除非您正在运行一个特权应用程序,该应用程序可以访问 Linux(或 Windows 等价物)中的“原始”设备文件。

即便如此,您仍需要实现一整套代码,以了解磁盘块级别的文件系统结构,并且可以进行所有计算。

这些计算远比您的问题设想的复杂得多。有多种文件系统格式需要处理,然后是从虚拟磁盘块号到物理磁盘/盘片/磁道/扇区寻址级别的映射。


即使你做到了这一点,你也不能将这些信息用于任何事情:

  1. 尝试使用物理磁盘地址写入文件会很危险。一个错误,你已经破坏了文件系统。 (事实上​​,除非您先卸载文件系统,否则不可能安全地进行操作……因为您的应用程序无法与操作系统的工作相协调。)

  2. 即使读取也很难可靠地进行,因为操作系统可能会在您读取时写入文件,这可能会更改文件内容的磁盘地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 2015-01-08
    • 2023-03-08
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多