#!/usr/bin/perl use warnings; use strict; use Fcntl qw( :DEFAULT :flock ); use POSIX qw( strftime ); if(!$ARGV[0] or !$ARGV[1]) { print STDERR <<USAGE; Usage: $0 logfile num USAGE exit; } my ($log, $num) = @ARGV; sysopen my $fh, $log, O_RDWR|O_CREAT|O_APPEND or die "Couldn't open $log for O_RDWE|O_CREAT|O_APPEND: $!\n"; flock $fh, LOCK_EX or die "Couldn't flock $log: $!\n"; close $fh or die "Couldn't close $log: $!\n"; sysopen $fh, $log, O_RDONLY or die "Couldn't open $log for reading: $!\n"; flock $fh, LOCK_EX or die "Couldn't flock $log: $!\n"; my @lines = <$fh>; close $fh or die "Couldn't close $log: $!\n"; sysopen $fh, $log, O_RDWR|O_CREAT|O_TRUNC or die "Couldn't open $log for O_RDWE|O_CREAT|O_TRUNC: $!\n"; flock $fh, LOCK_EX or die "Couldn't flock $log: $!\n"; print $fh $_ for reverse +(reverse @lines)[0 .. $num-1]; #print $fh strftime "datumd: %d.%m. %H:%M\n", localtime; close $fh or die "Couldn't close $log: $!\n"; exit;
Download