EN JA
FILEMON(4)
FILEMON(4) FreeBSD Kernel Interfaces Manual FILEMON(4)

名称

filemonfilemon デバイス

書式

#include < dev/filemon/filemon.h>

解説

filemon デバイスによって、プロセスは、その複数の子どものファイル操作データを集めることができます。デバイス /dev/filemon は、2 つの ioctl(2) 呼び出しに応答します。

システムコールは、次の単一文字を使用して表示されます:

C
chdir(2)
D
unlink(2)
E
exec(2)
F
fork(2), vfork(2)
L
link(2), linkat(2), symlink(2), symlinkat(2)
M
rename(2)
R
読み込みのための open(2)
S
stat(2)
W
書き込みのための open(2)
X
_exit(2)

R’に続く‘ W’レコードは、R/W のための単一の open(2) または‘ R’のための 1 つ、‘ W’のための 1 つの 2 つの個別の open(2) 呼び出しを表わすことができることに注意してください。成功したシステムコールだけが捕獲 (capture) されることに注意してください。

IOCTL

ユーザモードのプログラムは、下記に記述されている多くの ioctl を通して filemon ドライバと通信します。各々は、単一の引数を取ります。
FILEMON_SET_FD
供給されたオープンファイル記述子に内部のトレースバッファを書き込みます。
FILEMON_SET_PID
トレースする子プロセスの ID。

戻り値

ioctl() 関数は、成功するなら、値 0 を返します。そうでなければ、値-1 が返され、グローバル変数 errno は、エラーを示す値が設定されます。

関連ファイル

/dev/filemon

使用例

#include <sys/types.h> 
#include <sys/stat.h> 
#include <sys/wait.h> 
#include <sys/ioctl.h> 
#include <dev/filemon/filemon.h> 
#include <fcntl.h> 
#include <err.h> 
#include <unistd.h> 
 
static void 
open_filemon(void) 
{ 
 pid_t child; 
 int fm_fd, fm_log; 
 
 if ((fm_fd = open("/dev/filemon", O_RDWR | O_CLOEXEC)) == -1) 
  err(1, "open(\"/dev/filemon\", O_RDWR)"); 
 if ((fm_log = open("filemon.out", 
     O_CREAT | O_WRONLY | O_TRUNC | O_CLOEXEC, DEFFILEMODE)) == -1) 
  err(1, "open(filemon.out)"); 
 
 if (ioctl(fm_fd, FILEMON_SET_FD, &fm_log) == -1) 
  err(1, "Cannot set filemon log file descriptor"); 
 
 if ((child = fork()) == 0) { 
  child = getpid(); 
  if (ioctl(fm_fd, FILEMON_SET_PID, &child) == -1) 
   err(1, "Cannot set filemon PID"); 
  /* ここで何かを行います. */ 
 } else { 
  wait(&child); 
  close(fm_fd); 
 } 
}

filemon.out と名前を付けられたファイルを作成し、それに filemon バッファの内容を書き込むために filemon デバイスを設定します。

歴史

filemon デバイスは、 FreeBSD 9.1 で登場しました。
June 14, 2013 FreeBSD