2016-07-10 9 views
0

あるアプリケーションが書き込みを行っているデータファイルがあるとします。データが読み込まれると、それは役に立たないので、スペースを節約するために削除することができます。システムレベルのファイルからすでに読み込まれたデータを消去する

1)ファイルが特定のサイズに達したら、 をロックします。2)読み込み中のインデックス(現在表示されているファイル内のバイトを表すポインタ)を見てください。このファイル 3)インデックス 4)ファイル 5の新たな始まりに読み出しコールのインデックスを更新します)その読み取り/書き込みが再開できるように、ファイルのロックを解除する前に来て、すべてのファイルデータを削除するためのvnodeテーブルに呼び出します

自分でシステムを経験することはあまりありませんが、システムレベルでこれを行うと、言語に依存しないことになります(つまり、アプリケーションがJava呼び出しやPython呼び出しを使用して読み書きする場合いいえ問題)。

データファイルはunix v6ファイルシステムにあります。ファイルのサイズを監視してデータを削除することは問題ありませんが、1)vnodeテーブルの他のエントリにアクセスして、ファイルの読み込み位置を確認し、2)読み取​​りポインタを更新するシステムコールを見つけることができません。これらのシステムコール。

答えて

0

Unix v6ファイルシステムは意味をなさない。私は1975年にベル研究所がPDP-11用にリリースしたv6 Unixシステムではないと確信しています。一つは、JavaやPythonを決してサポートしていないと確信しています!ですから、あなたはおそらく、あなたが意味するシステムをもう少し具体的にする必要があります。 OpenBSD(まだバージョン6をリリースしていない)やFreeBSD(バージョン10までとバージョン6はかなり古くなっています)にすることはできません。たぶんNetBSD?いずれの場合においても

、私はそれが非常に非ポータブルなように、これをサポートするために、カーネルの変更をしようとお勧めします、とあなたは物事が右に行うことを考えているよりもはるかに難しいことではないでしょう。具体的には、論理ブロックと物理ブロックとの間のマッピングの番号を変更することは、トリッキーです。 PUNCH HOLE操作をサポートするオペレーティングシステムとファイルシステム(Linuxのext4やxfsなど)があります。これらのオフセットは、ファイルシステムブロックサイズの倍数である限り、指定された開始オフセットと終了オフセットの間のブロックを割り当て解除します。ファイルの先頭または中からバイトを "削除"するCOLLAPSE RANGE操作を使用することもできますが、ファイルシステムのブロックサイズの倍数でなければならず、ファイルオフセットに影響を与えません開いているファイル記述子のCOLLAPSE RANGEは、ページキャッシュの一貫性を維持するために、ファイルのキャッシュされたすべてのページを削除する必要があるため、一般的には本当に悪い考えです。それが有用な時代は非常にまれです。主な使用例は、本当に大きなビデオファイルを操作している人のようです。しかし、構造的には、これはほぼ確実です何をしたいですか?

ユーザスペースでこれを行うことをお勧めします。はい、JavaとPythonでサポートを実装する必要があるのですが、信頼してください。これは、カーネルやファイルシステムレベルのハッキングよりも簡単です。あなたが本当に主張しているのであれば、Cライブラリを作成してJavaとPythonから呼び出すことができるSWIGインタフェースを作成できますが、実際にはJavaやPythonの慣用句やJavaコードで論理を2回再実装する方が簡単でしょう。

私は、ライターに約1メガバイトのサイズのチャンクを書き込ませ、チャンクが特定のサイズに達すると、新しいファイルで新しいチャンクを開始するようにします。チャンクに数値的に名前を付けます(data0001、data0002など)。リーダーは単にチャンクを読み取るだけで、チャンクを終了するとチャンクファイルを削除して移動することができます。

本当に簡単で、それはあなたがカーネルレベルのハッキングをやろうとしているの雑草で迷子にしません。

+0

良いキャッチ - 私は、Linuxサーバー上で見つけられるようなUNIX系ファイルシステムを意味していました(私は基本的な概念を学ぶためにUNIX v6について読んでいました)。 – pqx994

+0

私は作家ではないのであなたの提案はうまくいかないようです - 私のものではない現在実行中のアプリケーションがファイルに書き込んでいると想像してください。私はアプリケーションを編集することはできませんし、それがどのように書いているのですか、私はファイル名を知っており、それにアクセスできます。 – pqx994

+0

@ pqx994アプリケーションでFIFOに書き込むことができますか? –

関連する問題