0

ANSI C でプログラムを作成しています。このプログラムは、PID を引数として取り、その特定の PID がファイルを開いたり閉じたりするたびに、ファイル名に関する情報を stdout に出力する必要があります。

基本的に、/proc/PID/fd ディレクトリには、PID によって使用されるファイルへのシンボリック リンクが含まれていることがわかっています。

while ループでそのディレクトリを readdir() し、各要素を readlink() することにより、現在 PID によって開かれているすべてのファイルのファイル名を取得し、それらを stdout に出力できます。しかし、それは私の元のタスクを完全には解決しません.PIDのOpened File Descriptor Tableの変更のイベントのみをSTDOUTに出力する必要があります。さらに、新しいファイルが開かれたときだけでなく、FDが閉じられたときもキャッチする必要があります。

したがって、ユーザー空間で特定の PID のファイル アクセス イベントをキャッチするメカニズムが必要です。

また、 inotify() メカニズムを使用して IN_OPEN / IN_CLOSE をキャッチしようとしましたが、これは通常のディレクトリに対してのみ機能し、 /proc (procfs) に対しては機能しません! /proc/PID/fd ディレクトリに inotify_watch を追加すると、イベントがまったくキャッチされません (おそらく PROCFS の性質によるものです)。

私のタスクを解決するメカニズムを提案していただけますか? PSそして、私の悪い英語で申し訳ありません。

4

1 に答える 1

0

Linux 固有のソリューションが必要な場合は、fanotify を使用できます。例については、http: //git.infradead.org/users/eparis/fanotify-example.gitを確認してください。グローバル通知をサブスクライブしてから、関心のある pid の通知のみをフィルタリングできます。

于 2012-04-21T14:28:32.080 に答える