Recipe 8.24 Program: tailwtmp

Every time a user logs into or out of a Unix system, a record is added to the wtmp file. You can't use the normal tail program on it, because the file is in binary format. The tailwtmp program in Example 8-7 knows the format of the binary file and shows every new record as it appears. You'll have to adjust the pack format for your own system.

Example 8-7. tailwtmp
  #!/usr/bin/perl -w   # tailwtmp - watch for logins and logouts;    # uses linux utmp structure, from utmp(5)   $typedef = "s x2 i A12 A4 l A8 A16 l";   $sizeof = length pack($typedef, ( ) );   use IO::File;   open(WTMP, "< :raw", "/var/log/wtmp") or die "can't open /var/log/wtmp: $!";   seek(WTMP, 0, SEEK_END);   for (;;) {            while (read(WTMP, $buffer, $sizeof) =  = $sizeof) {           ($type, $pid,  $line, $id, $time, $user, $host, $addr)                = unpack($typedef, $buffer);           next unless $user && ord($user) && $time;           printf "%1d %-8s %-12s %2s %-24s %-16s %5d %08x\n",                $type,$user,$line,$id,scalar(localtime($time)),                $host,$pid,$addr;       }        for ($size = -s WTMP; $size =  = -s WTMP; sleep 1) {  }       WTMP->clearerr( );   }


Perl Cookbook
Perl Cookbook, Second Edition
ISBN: 0596003137
EAN: 2147483647
Year: 2003
Pages: 501

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net