2012-02-14 3 views
-2

ハードディスクはブロックに分割され、ハードディスクに保存されているすべてのファイルはそのブロックサイズに分割され、ハードディスクに保存されます。ファイルのブロックの開始メモリアドレスを取得する


1MBのファイルで、ブロックサイズが512バイトの場合、ファイルの最初のブロックは0x121454に格納され、2番目のブロックは0x846132に格納されます。
0x1214540x846132を取得する必要があります。私はJavaを使いたい。
Javaにない場合はCを使用できますか?もしそうなら、私はそれを実装することができます。

Linuxのinodeブロックでは、すべてのメモリアドレスの詳細がわかりますが、ウィンドウは認識しません。

+2

句読点、私の友人; 、... – Coffee

+0

良い読書 - http://stackoverflow.com/questions/8635598/java-how-to-store-and-retrieve-memory-address-like-in-c – Coffee

+0

タイトルがあなたの質問に一致しません。そして、いくつかの書式は間違いなくいくつかの答えを求めるのに役立ちます。 – Perception

答えて

2

純粋なJavaではこれを行うことはできません。

Linuxの「未処理の」デバイスファイル(またはそれに相当するWindowsファイル)にアクセスできる特権アプリケーションを実行している場合を除き、おそらくC/C++でもこれを行うことはできません。

さらに、ディスクブロックレベルでファイルシステム構造を理解し、すべての計算を実行できるコードスタック全体を実装する必要があります。

これらの計算は、あなたの質問の想定よりはるかに複雑です。処理するファイルシステムフォーマットは複数あり、仮想ディスクブロック番号から物理ディスク/プラッタ/トラック/セクタアドレッシングのレベルまでのマッピングがあります。


そして、あなたはこれを達成したにも一度、あなたはずっと何のために情報を使用することはできません。

  1. 物理ディスクのアドレスを使用してファイルを書き込もうとするのは危険だろう。 1つの間違いがあり、ファイルシステムを破棄しました。 (実際には、ファイルシステムを最初にアンマウントするまで安全にすることは不可能です...アプリケーションがOSの機能とコーディネートできる方法がないためです)。

  2. 信頼性の高い読み方でも、読んでいる間にOSがファイルに書き込んでいる可能性があり、ファイルの内容のディスクアドレスを変更する可能性があるからです。

関連する問題