Commit Graph

72 Commits

Author SHA1 Message Date
marcel
0e4a74aceb Better handle the -F case:
o  When stat(2) fails (i.e. the file has been moved) there's no new
   file with the same name yet, so keep showing the file that's open.
   This yields the same behaviour as -f, for which we don't stat(2).
o  When a new file with the same name has been created (i.e stat(2)
   succeeds but the inode or device numbers differ from the opened
   file), show any new lines in the opened file (i.e. the old or
   rotated file) before reopening the new file.

These changes fix the observed behaviour that tail(1) doesn't show
the very last lines of the rotated (log) files.

PR: bin/101979
Tested by: Jos Backus <jos@catnook.com>
MFC after: 2 months
2006-10-21 18:05:06 +00:00
ru
7adc3589c2 - Simplify the formatting in the SYNOPSIS.
- Add the forgotten new option in usage().
2006-06-30 08:19:26 +00:00
flz
6d4f7a588c Add a -q option to suppress header lines when multiple files are specified.
Approved by:	cperciva (mentor)
MFC after:	1 week
2006-06-29 22:07:49 +00:00
ps
a234fe9966 Unbreak tail -f on non-local filesystems. 2005-08-26 08:15:57 +00:00
eivind
4587fc275c Back out revision 1.19 and 1.20 until I find mental clarity to deal with
issues bde pointed out.
2005-06-01 20:34:06 +00:00
eivind
bf8bf9051e Remove an errno reset that became unnecessary.
Noticed by: juli
2005-05-26 22:49:08 +00:00
eivind
1a8a2d84cd We are past 4.4BSD - use our new-found stat flags for pipes and fifos. 2005-05-26 22:14:37 +00:00
iedowse
316bdea082 Don't skip the initialisation of tl->len when we hit an EOF immediately
after allocating a new buffer. This bug caused `tail -r < /dev/null'
to core dump when the `J' malloc option is set, and also affected
any other input that was an exact multiple of 128k.
2005-03-20 22:08:52 +00:00
delphij
aa38886281 Save last displayed file by having the "last" pointer global and save it
during we show the first file's tail.  Instead of:

	tarsier% tail -f 1 2
	==> 1 <==
	foo
	bar

	==> 2 <==
	bar
	foo

	==> 2 <==
	bar2
	foo2

Now with this change, we have:

	tarsier% tail -f 1 2
	==> 1 <==
	foo
	bar

	==> 2 <==
	bar
	foo
	bar2
	foo2

While I'm there, move a comment to where it should belong to.  Also,
const'ify the "last" static because we will never need to change the
contents it points to.

MFC After:	1 week
2005-02-04 14:01:06 +00:00
ru
6cc4b6c220 Added the EXIT STATUS section where appropriate. 2005-01-17 07:44:44 +00:00
brian
336b304268 Don't reprint file names unnecessarily.
PR:		75028
Submitted by:	mteterin at 250-217 dot customer dot cloud9 dot net
MFC after:	7 days
2005-01-12 04:06:31 +00:00
dwmalone
cf651884b0 Bump WARNS to 4 as this seems OK on the alpha now. 2005-01-10 20:22:37 +00:00
dwmalone
eda4dfd490 Cast size_t to off_t before adding them to avoid warnings on the alpha.
Use %ld and intmax_t for printing an off_t.
2005-01-10 20:19:46 +00:00
dwmalone
86d764422f Some variables became unused or global in the last change to this
file. Remove the now redundant declarations.

Add declarations for the new show and set_events functions and make
them static.
2005-01-10 20:16:08 +00:00
paul
4b813e782f Add support for following more than one file i.e.
tail -f file1 file2
2004-11-04 19:18:19 +00:00
paul
a13bf2199d Revert a WIP change that shouldn't have been in last commit. 2004-11-03 17:52:29 +00:00
paul
5386ac46ea Convert to ANSI style function definitions. 2004-11-03 15:23:11 +00:00
ru
fb1d8b3724 Mechanically kill hard sentence breaks. 2004-07-02 22:22:35 +00:00
dg
0ed08c885f Removed check of st_rdev changing in the -F support. st_rdev for regular
files is usually the first direct block pointer. Since FreeBSD does
automatic block reallocation to reduce filesystem fragmentation, the
file being tailed can be relocated to different blocks 'on-the-fly',
making the check for st_rdev unreliable. The result of this bug is
tail -F pseudo-randomnly thinking the file was rotated when it wasn't,
and as a result, spews out the entire file trying to catch up.

MFC after:	3 days
2003-08-14 11:02:03 +00:00
markm
d152e35c14 Revert part of the last commit. This fixes tail for pipes.
Submitted by:	joerg
2003-06-10 16:49:14 +00:00
tjr
e6e7b3cddd When doing tail -F, return if the freopen() of the file fails instead of
trying to use a null file pointer.
2002-12-15 11:26:57 +00:00
alfred
0524c94cee revert WARNS=4, it makes the alpha compile sad. 2002-07-15 09:53:34 +00:00
alfred
adf0fb9f4e WARNS=4, add 2002-07-14 18:21:07 +00:00
jmallett
241a475e6f Note that this appeared at least as early as PWB UNIX.
Use the literal string 'PWB UNIX', as we still have no .At macro for it.
2002-06-10 22:59:59 +00:00
dwmalone
ec9302ee87 Fix up vendor IDs.
Put a sequence point between writing to a variable and using it.
2002-04-13 20:59:48 +00:00
murray
cc26525bb5 GCC 3.1 cleanup - add a break after default: at the end of a switch
statement.
2002-04-08 08:34:00 +00:00
imp
0b20191705 remove __P 2002-03-22 01:42:45 +00:00
markm
d7e4e2a006 WARNS=2 fixes, use __FBSDID(). 2001-12-12 00:01:16 +00:00
iedowse
f9343b3578 Since kqueue support was added to tail, the "-F" option (check for
renames/rotations) only detected cases where the file itself was
moved or deleted. If part of the path to the file (or a symlink
in the path) was changed instead, tail would not notice.

Fix this by ensuring that we stat the path at least once every
second in the -F case to check for changes. We still use kqueue
when possible to inform us quickly when the file has changed.

PR:		bin/24955
Submitted by:	Maxim Konovalov <maxim@macomnet.ru>
MFC after:	1 week
2001-11-25 18:03:28 +00:00
fenner
efade0125d Allow "obsolete" (but commonly-used) command line style to be used
with -F, e.g. tail -1 -F /var/log/messages.

Submitted by:	Maxim Konovalov <maxim@macomnet.ru>
2001-10-02 06:22:01 +00:00
ache
46ab006323 File positions are off_t nowdays, not long, so:
long -> off_t
strtol -> strtoll
fseek -> fseeko

NOTE: that fseek not works for >long offsets files per POSIX:

[EOVERFLOW] For fseek( ), the resulting file offset would be a value which
cannot be represented correctly in an object of type long.
2001-09-01 22:22:45 +00:00
ru
bde8ec1b70 mdoc(7) police: utilize the new .Ex macro. 2001-08-15 09:09:47 +00:00
ru
36f138439b mdoc(7) police: removed HISTORY info from the .Os call. 2001-07-10 14:16:33 +00:00
jlemon
08bbb9b6f5 o If the file being tailed is moved back to the original location,
resume using kqueue to monitor it, if possible.
  o auto-clear the read filter on EOF; this is needed when tailing a FIFO.
2001-06-06 17:47:13 +00:00
ache
323ee87c02 Back out my fseeko -> fseek(END) change - we need to position on what we
displayed last, not to the end of file
2001-03-28 13:10:17 +00:00
ache
b3c7f151dc Restore part of my fix spammed in v1.23:
fseeko(file_size, SEEK_SET) -> fseek(0L, SEEK_END)
1) File may grows between operations, so fseeko to file_size may miss
2) 0L, SEEK_END is the same code using in tail in all other places
2001-03-27 23:24:25 +00:00
dwmalone
17ede005a9 Fix tail to work on files bigger than 2GB.
PR:		14786
Reviewed by:	iedowse
2001-03-27 20:37:34 +00:00
ache
aec4c6204b Add comment explaining why size not passed directly to mmap, i.e. not relay
on its check.
KNF multi-line comments
(inspired by bde)
2001-03-27 15:53:48 +00:00
ache
8a3f432b98 Use SSIZE_MAX instead of INT_MAX, as kernel does ssize_t check
Better explanation comment of FIXME section
2001-03-27 01:16:44 +00:00
ache
5b94e50e9a Treat mmap() error as fatal too, i.e. do exit(1) instead of return 2001-03-26 19:36:27 +00:00
ache
f087b10f53 rlines() checks:
1) really check for size overflow by checking negative value.
2) since mmap() not support files over INT_MAX size, add check for it
until either mmap() will be fixed or tail will be rewritted to handle
large files alternatively.
3) replace fseek(... file_size, SEEK_SET) with fseek(... 0L, SEEK_END)
to avoid off_t -> long cast
4) Use exit() if file is too big instead of warning and wrong logic
afterwards.
2001-03-26 19:29:49 +00:00
jlemon
15e59884c9 Use EV_SET() macro to initialize kevent structure. 2001-02-28 16:16:31 +00:00
ru
5038154904 Mention the -F in the usage().
PR:		24586
Submitted by:	Cyrille Lefevre <clefevre@citeweb.net>
2001-01-24 08:27:59 +00:00
asmodai
2bf21fac09 Remove register keyword usage with prejudice.
Modern compilers are smarter when it comes to allocating register
usage.
2000-12-03 17:05:45 +00:00
asmodai
33a20c676d Use a size_t instead of an int. 2000-12-02 20:21:13 +00:00
asmodai
85f201535e Properly constify some static arrays.
Also #if out some sccsid's and add rcsid's.
2000-12-02 19:10:12 +00:00
ru
0d1334ca0c mdoc(7) police: use the new features of the Nm macro. 2000-11-20 19:21:22 +00:00
jlemon
d7b89f0457 Convert calls to match new kqueue API. 2000-07-18 19:38:38 +00:00
jlemon
ad3e80ef8d If the kevent() registration fails (probably due to the underlying
filesystem not being kq-aware), then fall back to using sleep.  This
allows tail to work with NFS filesystems again without chewing up CPU time.

When given the -F flag, resort to sleep/stat after the file was moved
or deleted.  This allows a window where the file being tailed does not
exist at all, which is typically the case during log rotation.  Switch
back to using kq (if possible) after the file is reopened.
2000-06-22 18:46:03 +00:00
jlemon
d8e2bb35d5 Change <event.h> --> <sys/event.h> 2000-04-18 16:56:55 +00:00