127db57a9SDavid E. O'Brien.\" Copyright (c) 2012 227db57a9SDavid E. O'Brien.\" David E. O'Brien <obrien@FreeBSD.org>. All rights reserved. 327db57a9SDavid E. O'Brien.\" 427db57a9SDavid E. O'Brien.\" Redistribution and use in source and binary forms, with or without 527db57a9SDavid E. O'Brien.\" modification, are permitted provided that the following conditions 627db57a9SDavid E. O'Brien.\" are met: 727db57a9SDavid E. O'Brien.\" 1. Redistributions of source code must retain the above copyright 827db57a9SDavid E. O'Brien.\" notice, this list of conditions and the following disclaimer. 927db57a9SDavid E. O'Brien.\" 2. Redistributions in binary form must reproduce the above copyright 1027db57a9SDavid E. O'Brien.\" notice, this list of conditions and the following disclaimer in the 1127db57a9SDavid E. O'Brien.\" documentation and/or other materials provided with the distribution. 1227db57a9SDavid E. O'Brien.\" 3. All advertising materials mentioning features or use of this software 1327db57a9SDavid E. O'Brien.\" must display the following acknowledgement: 1427db57a9SDavid E. O'Brien.\" This product includes software developed by David E. O'Brien and 1527db57a9SDavid E. O'Brien.\" contributors. 1627db57a9SDavid E. O'Brien.\" 4. Neither the name of the author nor the names of its contributors 1727db57a9SDavid E. O'Brien.\" may be used to endorse or promote products derived from this software 1827db57a9SDavid E. O'Brien.\" without specific prior written permission. 1927db57a9SDavid E. O'Brien.\" 2027db57a9SDavid E. O'Brien.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 2127db57a9SDavid E. O'Brien.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2227db57a9SDavid E. O'Brien.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2327db57a9SDavid E. O'Brien.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2427db57a9SDavid E. O'Brien.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2527db57a9SDavid E. O'Brien.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2627db57a9SDavid E. O'Brien.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2727db57a9SDavid E. O'Brien.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2827db57a9SDavid E. O'Brien.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2927db57a9SDavid E. O'Brien.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3027db57a9SDavid E. O'Brien.\" SUCH DAMAGE. 3127db57a9SDavid E. O'Brien.\" 3227db57a9SDavid E. O'Brien.\" $FreeBSD$ 3327db57a9SDavid E. O'Brien.\" 3427db57a9SDavid E. O'Brien.Dd May 30, 2012 3527db57a9SDavid E. O'Brien.Dt FILEMON 4 3627db57a9SDavid E. O'Brien.Os 3727db57a9SDavid E. O'Brien.Sh NAME 3827db57a9SDavid E. O'Brien.Nm filemon 3927db57a9SDavid E. O'Brien.Nd the filemon device 4027db57a9SDavid E. O'Brien.Sh SYNOPSIS 4127db57a9SDavid E. O'Brien.In dev/filemon/filemon.h 4227db57a9SDavid E. O'Brien.Sh DESCRIPTION 4327db57a9SDavid E. O'BrienThe 4427db57a9SDavid E. O'Brien.Nm 4527db57a9SDavid E. O'Briendevice allows a process to collect file operations data of its children. 4627db57a9SDavid E. O'BrienThe device 4727db57a9SDavid E. O'Brien.Pa /dev/filemon 4827db57a9SDavid E. O'Brienresponds to two 4927db57a9SDavid E. O'Brien.Xr ioctl 2 5027db57a9SDavid E. O'Briencalls. 5127db57a9SDavid E. O'Brien.Pp 5227db57a9SDavid E. O'BrienSystem calls are denoted using the following single letters: 5327db57a9SDavid E. O'Brien.Bl -tag -width indent -compact 5427db57a9SDavid E. O'Brien.It Dq Li C 5527db57a9SDavid E. O'Brien.Xr chdir 2 5627db57a9SDavid E. O'Brien.It Dq Li D 5727db57a9SDavid E. O'Brien.Xr unlink 2 5827db57a9SDavid E. O'Brien.It Dq Li E 5927db57a9SDavid E. O'Brien.Xr exec 2 6027db57a9SDavid E. O'Brien.It Dq Li F 6127db57a9SDavid E. O'Brien.Xr fork 2 , 6227db57a9SDavid E. O'Brien.Xr vfork 2 6327db57a9SDavid E. O'Brien.It Dq Li L 6427db57a9SDavid E. O'Brien.Xr link 2 , 6527db57a9SDavid E. O'Brien.Xr linkat 2 , 6627db57a9SDavid E. O'Brien.Xr symlink 2 , 6727db57a9SDavid E. O'Brien.Xr symlinkat 2 6827db57a9SDavid E. O'Brien.It Dq Li M 6927db57a9SDavid E. O'Brien.Xr rename 2 7027db57a9SDavid E. O'Brien.It Dq Li R 7127db57a9SDavid E. O'Brien.Xr open 2 7227db57a9SDavid E. O'Brienfor read 7327db57a9SDavid E. O'Brien.It Dq Li S 7427db57a9SDavid E. O'Brien.Xr stat 2 7527db57a9SDavid E. O'Brien.It Dq Li W 7627db57a9SDavid E. O'Brien.Xr open 2 7727db57a9SDavid E. O'Brienfor write 7827db57a9SDavid E. O'Brien.It Dq Li X 7927db57a9SDavid E. O'Brien.Xr _exit 2 8027db57a9SDavid E. O'Brien.El 8127db57a9SDavid E. O'Brien.Pp 8227db57a9SDavid E. O'BrienNote that 8327db57a9SDavid E. O'Brien.Dq R 8427db57a9SDavid E. O'Brienfollowing 8527db57a9SDavid E. O'Brien.Dq W 8627db57a9SDavid E. O'Brienrecords can represent a single 8727db57a9SDavid E. O'Brien.Xr open 2 8827db57a9SDavid E. O'Brienfor R/W, 8927db57a9SDavid E. O'Brienor two seperate 9027db57a9SDavid E. O'Brien.Xr open 2 9127db57a9SDavid E. O'Briencalls, one for 9227db57a9SDavid E. O'BrienR 9327db57a9SDavid E. O'Brienand one for 9427db57a9SDavid E. O'BrienW. 9527db57a9SDavid E. O'Brien.Sh IOCTLS 96*d5064cc2SJoel DahlUser mode programs communicate with the 97*d5064cc2SJoel Dahl.Nm filemon 98*d5064cc2SJoel Dahldriver through a 9927db57a9SDavid E. O'Briennumber of ioctls which are described below. 10027db57a9SDavid E. O'BrienEach takes a single argument. 10127db57a9SDavid E. O'Brien.Bl -tag -width FILEMON_SET_PID 10227db57a9SDavid E. O'Brien.It Dv FILEMON_SET_FD 10327db57a9SDavid E. O'BrienWrite the internal tracing buffer to the supplied open file descriptor. 104*d5064cc2SJoel Dahl.It Dv FILEMON_SET_PID 10527db57a9SDavid E. O'BrienChild process ID to trace. 10627db57a9SDavid E. O'Brien.El 10727db57a9SDavid E. O'Brien.Sh RETURN VALUES 10827db57a9SDavid E. O'BrienThe ioctl returns zero on success and non-zero on failure. 109*d5064cc2SJoel Dahl.Sh FILES 110*d5064cc2SJoel Dahl.Bl -tag -width /dev/zero 111*d5064cc2SJoel Dahl.It Pa /dev/filemon 112*d5064cc2SJoel Dahl.El 11327db57a9SDavid E. O'Brien.Sh EXAMPLES 114*d5064cc2SJoel Dahl.Bd -literal 11527db57a9SDavid E. O'Brien#include <sys/types.h> 11627db57a9SDavid E. O'Brien#include <sys/stat.h> 11727db57a9SDavid E. O'Brien#include <sys/wait.h> 11827db57a9SDavid E. O'Brien#include <sys/ioctl.h> 11927db57a9SDavid E. O'Brien#include <dev/filemon/filemon.h> 12027db57a9SDavid E. O'Brien#include <fcntl.h> 12127db57a9SDavid E. O'Brien#include <err.h> 12227db57a9SDavid E. O'Brien 12327db57a9SDavid E. O'Brienstatic void 12427db57a9SDavid E. O'Brienopen_filemon(void) 12527db57a9SDavid E. O'Brien{ 12627db57a9SDavid E. O'Brien pid_t child; 12727db57a9SDavid E. O'Brien int fm_fd, fm_log; 12827db57a9SDavid E. O'Brien 12927db57a9SDavid E. O'Brien if ((fm_fd = open("/dev/filemon", O_RDWR)) == -1) 13027db57a9SDavid E. O'Brien err(1, "open(\"/dev/filemon\", O_RDWR)"); 13127db57a9SDavid E. O'Brien if ((fm_log = open("filemon.out", 13227db57a9SDavid E. O'Brien O_CREAT | O_WRONLY | O_TRUNC, DEFFILEMODE)) == -1) 13327db57a9SDavid E. O'Brien err(1, "open(filemon.out)"); 13427db57a9SDavid E. O'Brien 13530a39288SDavid E. O'Brien if (ioctl(fm_fd, FILEMON_SET_FD, &fm_log) == -1) 13627db57a9SDavid E. O'Brien err(1, "Cannot set filemon log file descriptor"); 13727db57a9SDavid E. O'Brien /* Set up these two fd's to close on exec. */ 13827db57a9SDavid E. O'Brien (void)fcntl(fm_fd, F_SETFD, FD_CLOEXEC); 13927db57a9SDavid E. O'Brien (void)fcntl(fm_log, F_SETFD, FD_CLOEXEC); 14027db57a9SDavid E. O'Brien 14127db57a9SDavid E. O'Brien if ((child = fork()) == 0) { 14230a39288SDavid E. O'Brien child = getpid(); 14330a39288SDavid E. O'Brien if (ioctl(fm_fd, FILEMON_SET_PID, &child) == -1) 14430a39288SDavid E. O'Brien err(1, "Cannot set filemon PID"); 14527db57a9SDavid E. O'Brien /* Do something here. */ 14627db57a9SDavid E. O'Brien return 0; 14727db57a9SDavid E. O'Brien } else { 14827db57a9SDavid E. O'Brien wait(&child); 14927db57a9SDavid E. O'Brien close(fm_fd); 15027db57a9SDavid E. O'Brien } 15127db57a9SDavid E. O'Brien return 0; 15227db57a9SDavid E. O'Brien} 15327db57a9SDavid E. O'Brien.Ed 15427db57a9SDavid E. O'Brien.Pp 15527db57a9SDavid E. O'BrienCreates a file named 15627db57a9SDavid E. O'Brien.Pa filemon.out 15727db57a9SDavid E. O'Brienand configures the 15827db57a9SDavid E. O'Brien.Nm 15927db57a9SDavid E. O'Briendevice to write the filemon buffer contents to it. 16027db57a9SDavid E. O'Brien.Sh SEE ALSO 16127db57a9SDavid E. O'Brien.Xr dtrace 1 , 16227db57a9SDavid E. O'Brien.Xr ktrace 1 , 16327db57a9SDavid E. O'Brien.Xr truss 1 16427db57a9SDavid E. O'Brien.Sh HISTORY 16527db57a9SDavid E. O'BrienA 16627db57a9SDavid E. O'Brien.Nm 16727db57a9SDavid E. O'Briendevice appeared in 16827db57a9SDavid E. O'Brien.Fx 9.1 . 169