📄 atail-f.pl
字号:
#Copyright (C)2001-2004 Altera Corporation#Any megafunction design, and related net list (encrypted or decrypted),#support information, device programming or simulation file, and any other#associated documentation or information provided by Altera or a partner#under Altera's Megafunction Partnership Program may be used only to#program PLD devices (but not masked PLD devices) from Altera. Any other#use of such megafunction design, net list, support information, device#programming or simulation file, or any other related documentation or#information is prohibited for any other purpose, including, but not#limited to modification, reverse engineering, de-compiling, or use with#any other silicon devices, unless such use is explicitly licensed under#a separate agreement with Altera or a megafunction partner. Title to#the intellectual property, including patents, copyrights, trademarks,#trade secrets, or maskworks, embodied in any such megafunction design,#net list, support information, device programming or simulation file, or#any other related documentation or information provided by Altera or a#megafunction partner, remains with Altera, the megafunction partner, or#their respective licensors. No other licenses, including any licenses#needed under any third party's intellectual property, are provided herein.#Copying or modifying any file, or portion thereof, to which this notice#is attached violates this copyright.@prog = split (/\/|\\/,$0) ; $pname = $prog[$#prog] ;select(STDIN); $| = 1; # make stdin unbufferredselect(STDOUT); $| = 1; # make stdout unbufferred$SIG{'INT'} = 'quit'; # run &quit on ^C&usage if @ARGV < 1; # die without 1 (file) arg$file = $ARGV[0];$old_size = -1;$size = 0;$some_bytes = 0;$char = 0;die if (&args_test($file) && sleep 5);while (1) { if (($size == 0) && ($size != $old_size)) { $formatted_time = &get_formatted_time(); syswrite (STDOUT,"\n$pname: $file size is zero at time $formatted_time.\n"."------------------------------------------------------------------------\n"); $old_size = $size; } ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev, $size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($file); if ($size > $old_size) { sysopen (LOG, $file, O_RDONLY) or &ktb(); # ktb == KickTheBucket sysseek (LOG, $old_size, 0); sysread (LOG, $some_bytes, $size - $old_size); close(LOG); if ($some_bytes =~ /([\n\r]*)([01]{8})([\n\r]{1,2})/) { $pre_crlf = $1; $pre_char = $2; $postcrlf = $3; $old_size += length($pre_crlf)+length($pre_char)+length($postcrlf); @zero_ones = split (//,$pre_char); for ($i = 0 ; $i <= $#zero_ones ; $i++) { # $#zero_ones should be 8 if ($zero_ones[$i] =~ /1/) { $char += 2**(7-$i); } } syswrite (STDOUT, (pack "c",$char)); $char = 0; } } select(undef, undef, undef, 0.1);} # end main loop [while TRUE]sub usage { die "usage: $pname logfile\n";} # usagesub quit { # interrupt handler for exit local ($sig) = @_; print STDERR "Caught SIG$sig; exiting...\n"; close (LOG); sleep 1; exit;} # quitsub ktb { # kick the bucket if file disappears local ($file) = @_; print STDERR "$pname: $file is gone!; exiting...\n"; sleep 1; exit 1;} # quitsub args_test { # return 0 for success; return 1 for fail local ($file) = @_; local $code = " "; local $die = 0; if (defined (open (LOG, $file))) { close(LOG); # success } else { $code = "$!\n"; # remember fail reason } if ($code ne " ") { print STDERR "$pname: Cannot open '$file': $code"; $die = 1; # remember any failure } return $die; # return any failure status.} # args_testsub get_formatted_time { # create a timestring without using packages my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); return (sprintf ("%.2d:%.2d:%.2d %.2d/%.2d/%.4d", $hour,$min,$sec,($mon + 1),$mday,($year + 1900)));} # get_formatted_time
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -