- - PR -
特定のファイルIOのフック
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-01 17:00
お世話になります。
任意のファイルのI/Oをフックしてファイルに出力される内容にデータを付加して 別のファイルに出力したいのですがこれは実現可能なのでしょうか? 元のファイルはそのまま出力されます。 [ メッセージ編集済み 編集者: 未記入 編集日時 2004-04-01 17:01 ] | ||||
|
投稿日時: 2004-04-01 19:03
コマンドでは tee ですかね
遅延可能なら周期的にファイルのサイズを見に行く。 あとはウイルス的なのを探す。 DB の内部動作ではそのようなこともちゃんとしていますが。 [ メッセージ編集済み 編集者: MMX 編集日時 2004-04-01 19:06 ] | ||||
|
投稿日時: 2004-04-01 22:45
んーと、どうもよく分からないのですが、
「ファイルに出力している、もともとのプロセスが特定できない /特定しない状況で、対象ファイルだけは特定できる」 ということでしょうか。 そうだとして... いちばん楽な方法は tail -f を使ったシェルスクリプトを 書く手でしょうね。 シェルスクリプトではダメ/イヤなら、Cなりなんなりで ファイルの末尾を読みつづけるプログラムを書く、という手で。 | ||||
|
投稿日時: 2004-04-02 10:38
すいませんちょっと説明がわかりずらかったかもしれません。申し訳ないです。
やりたいことは「ファイルを監視してファイルが更新されたら更新内容にさらに情報 を付加して別ファイルにも出力する」ということです。 teeコマンドつかえそうですね。あともしできればなんですが ファイルに出力したプログラムを判定する方法とかはあるんでしょうか? 例えば以下のようなとき ・監視しているファイルA1 ・別に出力したいファイルA2 A1にプログラムP1が「あああああ」と出力したらA2では「P1:あああああ」とかって できるのでしょうか? [ メッセージ編集済み 編集者: 未記入 編集日時 2004-04-02 10:39 ] | ||||
|
投稿日時: 2004-04-02 12:48
え〜、私が書いたことも混乱していますね、すみません。
どのタイミングで出力を捕まえるか、ということによって やり方が変わってくるわけで。 1. 出力する手前 2. 出力している最中 3. 出力が終わったあと 1. だと、出力するプログラムのソースコードを書き換えるなり、 起動手順を変更する(ここで tee を使うわけですね)なりの 方法になります。 2. だと、システムコールあるいは入出力関数のソースコードに 手を入れる必要があります。1、3 と比べるとかなり敷居が高く なります。他への影響が大きいですから。 3. だとファイルを監視することになります。難易度は1と同様に 低いのですが、この場合の問題点は「えんえんと(ムダな)監視 処理が走ってしまう」ということです。ふつうはそれほど 気にしなくてもよいだろうとは思いますが。1が使えるなら 1のほうがよいです。 さきに私が書いたのは3の方針です。logsurf のような、ログ監視 プログラムで使われるのもこの方針です。
上で書いた3の方法では不可能です。 1なら可能です。シェルスクリプトなりなんなりのプログラミングが 必要ですが。 プログラムP1に手を加えてもよい場合は syslog の仕組みを利用する 手もあるかも。 | ||||
|
投稿日時: 2004-04-02 13:28
タイミングはいつでもいいです。
ファイルを更新するプログラム(つまり複数ある)に は手を加えずに更新したプログラムがなんなかを 知りたいのでシステムコールを監視して行う方法 しかないかもしれませんね。 となるとカーネル関数とか使用することになるでしょうか? | ||||
|
投稿日時: 2004-04-02 13:42
strace を使って、system call を監視するという方法も考えられますが、この方法を使うと、対象となるプロセスの動作が、遅くなってしまいます。
| ||||
|
投稿日時: 2004-04-02 14:00
時間的にはそれほど厳しいものを要求はされていないので大丈夫です。
僕もstraceの使用方法がまだはっきりわかっていないのですが straceは対象とするプロセス、もしくはPGが判明してないと 使用するのは厳しいようなきがします。どうでしょうか? |