Получение начальных адресов памяти блоков файла - PullRequest
0 голосов
/ 14 февраля 2012

Жесткий диск разбивается на блоки, и каждый файл, хранящийся на жестком диске, разбивается на блоки такого размера и сохраняется на жестком диске.

, например
Рассмотрим файл размером 1 МБ, размер блока составляет 512 байт, затем первый блок файла сохраняется в 0x121454, а второй блок - 0x846132.
Мне нужно получить 0x121454 и 0x846132. Я хочу использовать Java.
Если не в Java, то можно ли использовать C? Если это так, с помощью JNI я могу реализовать это.

В блоке linux inode есть детали всех адресов памяти, но нет сведений об окне.

1 Ответ

2 голосов
/ 14 февраля 2012

Вы не можете сделать это на чистой Java.

Вы, вероятно, также не можете сделать это в C / C ++ ... если только вы не запускаете привилегированное приложение, которое может получить доступ к "необработанному" файлу устройства в Linux (или аналоге Windows).

И даже в этом случае вам потребуется реализовать целый стек кода, который понимает структуру файловой системы на уровне дискового блока и может выполнять все вычисления.

И эти вычисления намного, намного сложнее, чем предполагает ваш вопрос. Существует несколько форматов файловых систем, с которыми необходимо работать, а затем сопоставления номеров блоков виртуальных дисков с уровнем адресации физического диска / диска / дорожки / сектора.


И даже когда вы достигнете этого, вы не сможете использовать эту информацию ни для чего:

  1. Было бы опасно пытаться записывать файлы, используя адреса физических дисков. Одна ошибка, и вы уничтожили файловую систему. (На самом деле, это невозможно сделать безопасно, если вы сначала не размонтируете файловую систему ... потому что ваше приложение никак не может скоординировать действия ОС).

  2. Даже чтение было бы трудно сделать надежно, потому что ОС может записывать в файл во время чтения, и это может изменить адрес диска содержимого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...