From owner-FreeBSD-users-jp@jp.freebsd.org  Tue Mar 28 12:23:52 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id MAA09049;
	Tue, 28 Mar 2000 12:23:52 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from mist.nintendo.co.jp (firewall-user@mist.nintendo.co.jp [202.214.242.34])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id MAA09037
	for <FreeBSD-users-jp@jp.freebsd.org>; Tue, 28 Mar 2000 12:23:50 +0900 (JST)
	(envelope-from shirai@pon.nintendo.co.jp)
Received: by mist.nintendo.co.jp; id MAA24853; Tue, 28 Mar 2000 12:23:49 +0900 (JST)
Received: from unknown(172.16.1.9) by mist.nintendo.co.jp via smap (V4.2)
	id xma024696; Tue, 28 Mar 00 12:23:24 +0900
Received: from pon.nintendo.co.jp (pon [172.16.1.1])
	by yellow.nintendo.co.jp (8.9.3/3.7W/2000030115) with ESMTP id MAA05736
	for <FreeBSD-users-jp@jp.freebsd.org>; Tue, 28 Mar 2000 12:22:01 +0900 (JST)
Received: from pon (IDENT:shirai@localhost [127.0.0.1])
	by pon.nintendo.co.jp (8.9.3/3.7W/2000010715) with ESMTP id MAA32332
	for <FreeBSD-users-jp@jp.freebsd.org>; Tue, 28 Mar 2000 12:23:23 +0900
Message-Id: <200003280323.MAA32332@pon.nintendo.co.jp>
To: FreeBSD-users-jp@jp.freebsd.org
In-reply-to: My message of Fri, 24 Mar 2000 18:22:37 JST.
             <200003240922.SAA08850@pon.nintendo.co.jp> 
Date: Tue, 28 Mar 2000 12:23:23 +0900
From: Takashi SHIRAI <shirai@pon.nintendo.co.jp>
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: FreeBSD-users-jp 50857
Subject: [FreeBSD-users-jp 50857] Re: tail -f
 =?ISO-2022-JP?B?GyRCJE5GYk1GJHIlUCVDJS8lOSUvJW0hPCVrJDcbKEI=?= 
 =?ISO-2022-JP?B?GyRCJD8kJCEjGyhC?= 
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org
X-Originator: shirai@pon.nintendo.co.jp

$B!!#N#e#c#o$G$9!#(B

In Message-Id <200003240922.SAA08850@pon.nintendo.co.jp> 
        Takashi SHIRAI <shirai@pon.nintendo.co.jp> writes:
> $B!!#N#e#c#o$G$9!#(B

> > mkfifo $B$G:n$C$?(B FIFO $B%P%C%U%!$O(B less $B$,(B file $B$H$7$F$OFI$s$G$/$l$J$$(B
> > $B$h$&$J$N$G!"=q$-9~$_B&$,(B close() $B$9$k$H(B less $B$,=*N;$7$F$7$^$$$^$9!#(B
> > $B$,!"$3$C$A$NJ}$O(B less $B$r2~B$$9$l$P2r7h$7$=$&$G$9$M!#(B
> 
> $B!!(Bless -f $B$7$?$j?'!9;n$7$F$_$?$s$G$9$,%@%a$=$&$G$7$?!#C1$KFI(B
> $B$s$@C<$+$i>C$($F$/$l$k!V0lHL(B file$B!W$J(B fifo $B$,$"$l$P$$$$$s$G(B
> $B$9$,!#(B
> $B!!$G$b!"$I$NF;(B patch $B$,MW$k$h$&$J$i!"(BEOF $B$rBT$?$J$$<BAu$K2~(B
> $BB$$9$kJ}$,8-$$$s$8$c$J$$$G$7$g$&$+$M!)(B

$B!!(Bread $B;~$K(B select(2) $B$7$F(B read $B>uBV$N2DH]$r3NG'$7$F$_$k$h$&(B
$B$J(B patch $B:n$C$F$_$^$7$?!#(B5 $BJ,$G:n$C$?(B quick hack $B$G$9$,$I$&(B
$B$G$7$g$&$M!)(B
$B!!0l1~(B
	( tail -f ... | grep ... & ) | less
$B$G;H$($kH&!#(Bgrep $B$NJ}$O(B fflush() $BBP1~$5$;$F$k$s$G$7$?$h$M!)(B

$B!!(Bless-332 $B0J9_$G$"$l$P(B jless $B$r4^$a$F$3$N$^$^(B patch $BEv$?$j(B
$B$^$9$,!"(Bless-2xx $B7O$@$H<j$GEv$F$J$$$H$$$1$^$;$s!#<j$G$=$l$i(B
$B$7$$8D=j$K=q9~$s$G!"99$K!V(Bch_file$B!W(B->$B!V(Bfile$B!W!V(BABORT_SIGS()$B!W(B
->$B!V(Bsigs$B!W$H=q49$($F2<$5$$!#(B
$B!!(B10msec $B0J>e(B read $BIT2D>uBV$,B3$/$H(B EOF $B$,Mh$?$h$&$K8+$J$7(B
$B$^$9!#$3$N?tCM$O>u67$K1~$8$FE,Ev$KJQ$($F$_$^$7$g$&!#M>$j>.(B
$B$5$/$72a$.$k$H(B file access $B;~4V$,CY$$;~$K:G8e$^$GFI$a$J$/$J(B
$B$k$G$7$g$&!#(B
$B!!$^$!!"$3$N8D=j$O!V(BF$B!W$H!V(BG$B!W%3%^%s%I$G$7$+;H$o$l$F$J$$$s(B
$B$G!"(Bpatch $B$N1F6AHO0O$O>/$J$$$H;W$$$^$9!#0lHL$N(B less $B$NMQES(B
$B$K;H$C$F$bFC$K;Y>c$J$$$N$G$O$J$$$+$H!#(B

--- ch.c	Wed Apr 23 07:59:29 1997
+++ ch.c.new	Tue Mar 28 12:01:12 2000
@@ -24,6 +24,8 @@
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <sys/time.h>
+#define WAITMSEC	10
 
 /*
  * Low level character input from the input file.
@@ -433,9 +435,22 @@
 	/*
 	 * Do it the slow way: read till end of data.
 	 */
-	while (ch_forw_get() != EOI)
+	for (;;) {
+		fd_set readfds;
+		struct timeval tv;
+
+		tv.tv_sec = 0L;
+		tv.tv_usec = WAITMSEC * 1000L;
+		FD_ZERO(&readfds);
+		FD_SET(ch_file, &readfds);
+		if (!select(ch_file + 1, &readfds, NULL, NULL, &tv))
+			break;
+
+		if (ch_forw_get() == EOI)
+			break;
 		if (ABORT_SIGS())
 			return (1);
+	}
 	return (0);
 }
 
                                       $BGr0f(B $BN4(B (as $B#N#e#c#o(B)
