Provided by: freebsd-manpages_10.1~RC1-1_all bug

NAME

     filemon — the filemon device

SYNOPSIS

     #include <dev/filemon/filemon.h>

DESCRIPTION

     The filemon device allows a process to collect file operations data of its children.  The
     device /dev/filemon responds to two ioctl(2) calls.

     System calls are denoted using the following single letters:

     ‘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) for read
     ‘S’     stat(2)
     ‘W’     open(2) for write
     ‘X’     _exit(2)

     Note that ‘R’ following ‘W’ records can represent a single open(2) for R/W, or two separate
     open(2) calls, one for ‘R’ and one for ‘W’.  Note that only successful system calls are
     captured.

IOCTLS

     User mode programs communicate with the filemon driver through a number of ioctls which are
     described below.  Each takes a single argument.

     FILEMON_SET_FD   Write the internal tracing buffer to the supplied open file descriptor.

     FILEMON_SET_PID  Child process ID to trace.

RETURN VALUES

     The ioctl() function returns the value 0 if successful; otherwise the value -1 is returned
     and the global variable errno is set to indicate the error.

FILES

     /dev/filemon

EXAMPLES

     #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");
                     /* Do something here. */
             } else {
                     wait(&child);
                     close(fm_fd);
             }
     }

     Creates a file named filemon.out and configures the filemon device to write the filemon
     buffer contents to it.

SEE ALSO

     dtrace(1), ktrace(1), truss(1), ioctl(2)

HISTORY

     A filemon device appeared in FreeBSD 9.1.