tail,stat: add support for FhGFS
[coreutils.git] / src / tail.c
blob1f619f3eb2ae393a86ab6061d0a13f12305824d3
1 /* tail -- output the last part of file(s)
2 Copyright (C) 1989-1991, 1995-2006, 2008-2011 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* Can display any amount of data, unlike the Unix version, which uses
18 a fixed size buffer and therefore can only deliver a limited number
19 of lines.
21 Original version by Paul Rubin <phr@ocf.berkeley.edu>.
22 Extensions by David MacKenzie <djm@gnu.ai.mit.edu>.
23 tail -f for multiple files by Ian Lance Taylor <ian@airs.com>.
24 inotify back-end by Giuseppe Scrivano <gscrivano@gnu.org>. */
26 #include <config.h>
28 #include <stdio.h>
29 #include <assert.h>
30 #include <getopt.h>
31 #include <sys/types.h>
32 #include <signal.h>
34 #include "system.h"
35 #include "argmatch.h"
36 #include "c-strtod.h"
37 #include "error.h"
38 #include "fcntl--.h"
39 #include "isapipe.h"
40 #include "posixver.h"
41 #include "quote.h"
42 #include "safe-read.h"
43 #include "stat-time.h"
44 #include "xfreopen.h"
45 #include "xnanosleep.h"
46 #include "xstrtol.h"
47 #include "xstrtod.h"
49 #if HAVE_INOTIFY
50 # include "hash.h"
51 # include <sys/inotify.h>
52 /* `select' is used by tail_forever_inotify. */
53 # include <sys/select.h>
55 /* inotify needs to know if a file is local. */
56 # include "fs.h"
57 # if HAVE_SYS_STATFS_H
58 # include <sys/statfs.h>
59 # elif HAVE_SYS_VFS_H
60 # include <sys/vfs.h>
61 # endif
62 #endif
64 /* The official name of this program (e.g., no `g' prefix). */
65 #define PROGRAM_NAME "tail"
67 #define AUTHORS \
68 proper_name ("Paul Rubin"), \
69 proper_name ("David MacKenzie"), \
70 proper_name ("Ian Lance Taylor"), \
71 proper_name ("Jim Meyering")
73 /* Number of items to tail. */
74 #define DEFAULT_N_LINES 10
76 /* Special values for dump_remainder's N_BYTES parameter. */
77 #define COPY_TO_EOF UINTMAX_MAX
78 #define COPY_A_BUFFER (UINTMAX_MAX - 1)
80 /* FIXME: make Follow_name the default? */
81 #define DEFAULT_FOLLOW_MODE Follow_descriptor
83 enum Follow_mode
85 /* Follow the name of each file: if the file is renamed, try to reopen
86 that name and track the end of the new file if/when it's recreated.
87 This is useful for tracking logs that are occasionally rotated. */
88 Follow_name = 1,
90 /* Follow each descriptor obtained upon opening a file.
91 That means we'll continue to follow the end of a file even after
92 it has been renamed or unlinked. */
93 Follow_descriptor = 2
96 /* The types of files for which tail works. */
97 #define IS_TAILABLE_FILE_TYPE(Mode) \
98 (S_ISREG (Mode) || S_ISFIFO (Mode) || S_ISSOCK (Mode) || S_ISCHR (Mode))
100 static char const *const follow_mode_string[] =
102 "descriptor", "name", NULL
105 static enum Follow_mode const follow_mode_map[] =
107 Follow_descriptor, Follow_name,
110 struct File_spec
112 /* The actual file name, or "-" for stdin. */
113 char *name;
115 /* Attributes of the file the last time we checked. */
116 off_t size;
117 struct timespec mtime;
118 dev_t dev;
119 ino_t ino;
120 mode_t mode;
122 /* The specified name initially referred to a directory or some other
123 type for which tail isn't meaningful. Unlike for a permission problem
124 (tailable, below) once this is set, the name is not checked ever again. */
125 bool ignore;
127 /* See the description of fremote. */
128 bool remote;
130 /* A file is tailable if it exists, is readable, and is of type
131 IS_TAILABLE_FILE_TYPE. */
132 bool tailable;
134 /* File descriptor on which the file is open; -1 if it's not open. */
135 int fd;
137 /* The value of errno seen last time we checked this file. */
138 int errnum;
140 /* 1 if O_NONBLOCK is clear, 0 if set, -1 if not known. */
141 int blocking;
143 #if HAVE_INOTIFY
144 /* The watch descriptor used by inotify. */
145 int wd;
147 /* The parent directory watch descriptor. It is used only
148 * when Follow_name is used. */
149 int parent_wd;
151 /* Offset in NAME of the basename part. */
152 size_t basename_start;
153 #endif
155 /* See description of DEFAULT_MAX_N_... below. */
156 uintmax_t n_unchanged_stats;
159 #if HAVE_INOTIFY
160 /* The events mask used with inotify on files. This mask is not used on
161 directories. */
162 static const uint32_t inotify_wd_mask = (IN_MODIFY | IN_ATTRIB
163 | IN_DELETE_SELF | IN_MOVE_SELF);
164 #endif
166 /* Keep trying to open a file even if it is inaccessible when tail starts
167 or if it becomes inaccessible later -- useful only with -f. */
168 static bool reopen_inaccessible_files;
170 /* If true, interpret the numeric argument as the number of lines.
171 Otherwise, interpret it as the number of bytes. */
172 static bool count_lines;
174 /* Whether we follow the name of each file or the file descriptor
175 that is initially associated with each name. */
176 static enum Follow_mode follow_mode = Follow_descriptor;
178 /* If true, read from the ends of all specified files until killed. */
179 static bool forever;
181 /* If true, count from start of file instead of end. */
182 static bool from_start;
184 /* If true, print filename headers. */
185 static bool print_headers;
187 /* When to print the filename banners. */
188 enum header_mode
190 multiple_files, always, never
193 /* When tailing a file by name, if there have been this many consecutive
194 iterations for which the file has not changed, then open/fstat
195 the file to determine if that file name is still associated with the
196 same device/inode-number pair as before. This option is meaningful only
197 when following by name. --max-unchanged-stats=N */
198 #define DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS 5
199 static uintmax_t max_n_unchanged_stats_between_opens =
200 DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS;
202 /* The process ID of the process (presumably on the current host)
203 that is writing to all followed files. */
204 static pid_t pid;
206 /* True if we have ever read standard input. */
207 static bool have_read_stdin;
209 /* If nonzero, skip the is-regular-file test used to determine whether
210 to use the lseek optimization. Instead, use the more general (and
211 more expensive) code unconditionally. Intended solely for testing. */
212 static bool presume_input_pipe;
214 /* If nonzero then don't use inotify even if available. */
215 static bool disable_inotify;
217 /* For long options that have no equivalent short option, use a
218 non-character as a pseudo short option, starting with CHAR_MAX + 1. */
219 enum
221 RETRY_OPTION = CHAR_MAX + 1,
222 MAX_UNCHANGED_STATS_OPTION,
223 PID_OPTION,
224 PRESUME_INPUT_PIPE_OPTION,
225 LONG_FOLLOW_OPTION,
226 DISABLE_INOTIFY_OPTION
229 static struct option const long_options[] =
231 {"bytes", required_argument, NULL, 'c'},
232 {"follow", optional_argument, NULL, LONG_FOLLOW_OPTION},
233 {"lines", required_argument, NULL, 'n'},
234 {"max-unchanged-stats", required_argument, NULL, MAX_UNCHANGED_STATS_OPTION},
235 {"-disable-inotify", no_argument, NULL,
236 DISABLE_INOTIFY_OPTION}, /* do not document */
237 {"pid", required_argument, NULL, PID_OPTION},
238 {"-presume-input-pipe", no_argument, NULL,
239 PRESUME_INPUT_PIPE_OPTION}, /* do not document */
240 {"quiet", no_argument, NULL, 'q'},
241 {"retry", no_argument, NULL, RETRY_OPTION},
242 {"silent", no_argument, NULL, 'q'},
243 {"sleep-interval", required_argument, NULL, 's'},
244 {"verbose", no_argument, NULL, 'v'},
245 {GETOPT_HELP_OPTION_DECL},
246 {GETOPT_VERSION_OPTION_DECL},
247 {NULL, 0, NULL, 0}
250 void
251 usage (int status)
253 if (status != EXIT_SUCCESS)
254 fprintf (stderr, _("Try `%s --help' for more information.\n"),
255 program_name);
256 else
258 printf (_("\
259 Usage: %s [OPTION]... [FILE]...\n\
261 program_name);
262 printf (_("\
263 Print the last %d lines of each FILE to standard output.\n\
264 With more than one FILE, precede each with a header giving the file name.\n\
265 With no FILE, or when FILE is -, read standard input.\n\
267 "), DEFAULT_N_LINES);
268 fputs (_("\
269 Mandatory arguments to long options are mandatory for short options too.\n\
270 "), stdout);
271 fputs (_("\
272 -c, --bytes=K output the last K bytes; alternatively, use -c +K\n\
273 to output bytes starting with the Kth of each file\n\
274 "), stdout);
275 fputs (_("\
276 -f, --follow[={name|descriptor}]\n\
277 output appended data as the file grows;\n\
278 -f, --follow, and --follow=descriptor are\n\
279 equivalent\n\
280 -F same as --follow=name --retry\n\
281 "), stdout);
282 printf (_("\
283 -n, --lines=K output the last K lines, instead of the last %d;\n\
284 or use -n +K to output lines starting with the Kth\n\
285 --max-unchanged-stats=N\n\
286 with --follow=name, reopen a FILE which has not\n\
287 changed size after N (default %d) iterations\n\
288 to see if it has been unlinked or renamed\n\
289 (this is the usual case of rotated log files).\n\
290 With inotify, this option is rarely useful.\n\
292 DEFAULT_N_LINES,
293 DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS
295 fputs (_("\
296 --pid=PID with -f, terminate after process ID, PID dies\n\
297 -q, --quiet, --silent never output headers giving file names\n\
298 --retry keep trying to open a file even when it is or\n\
299 becomes inaccessible; useful when following by\n\
300 name, i.e., with --follow=name\n\
301 "), stdout);
302 fputs (_("\
303 -s, --sleep-interval=N with -f, sleep for approximately N seconds\n\
304 (default 1.0) between iterations.\n\
305 With inotify and --pid=P, check process P at\n\
306 least once every N seconds.\n\
307 -v, --verbose always output headers giving file names\n\
308 "), stdout);
309 fputs (HELP_OPTION_DESCRIPTION, stdout);
310 fputs (VERSION_OPTION_DESCRIPTION, stdout);
311 fputs (_("\
313 If the first character of K (the number of bytes or lines) is a `+',\n\
314 print beginning with the Kth item from the start of each file, otherwise,\n\
315 print the last K items in the file. K may have a multiplier suffix:\n\
316 b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,\n\
317 GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.\n\
319 "), stdout);
320 fputs (_("\
321 With --follow (-f), tail defaults to following the file descriptor, which\n\
322 means that even if a tail'ed file is renamed, tail will continue to track\n\
323 its end. This default behavior is not desirable when you really want to\n\
324 track the actual name of the file, not the file descriptor (e.g., log\n\
325 rotation). Use --follow=name in that case. That causes tail to track the\n\
326 named file in a way that accommodates renaming, removal and creation.\n\
327 "), stdout);
328 emit_ancillary_info ();
330 exit (status);
333 static bool
334 valid_file_spec (struct File_spec const *f)
336 /* Exactly one of the following subexpressions must be true. */
337 return ((f->fd == -1) ^ (f->errnum == 0));
340 static char const *
341 pretty_name (struct File_spec const *f)
343 return (STREQ (f->name, "-") ? _("standard input") : f->name);
346 static void
347 xwrite_stdout (char const *buffer, size_t n_bytes)
349 if (n_bytes > 0 && fwrite (buffer, 1, n_bytes, stdout) == 0)
350 error (EXIT_FAILURE, errno, _("write error"));
353 /* Record a file F with descriptor FD, size SIZE, status ST, and
354 blocking status BLOCKING. */
356 static void
357 record_open_fd (struct File_spec *f, int fd,
358 off_t size, struct stat const *st,
359 int blocking)
361 f->fd = fd;
362 f->size = size;
363 f->mtime = get_stat_mtime (st);
364 f->dev = st->st_dev;
365 f->ino = st->st_ino;
366 f->mode = st->st_mode;
367 f->blocking = blocking;
368 f->n_unchanged_stats = 0;
369 f->ignore = false;
372 /* Close the file with descriptor FD and name FILENAME. */
374 static void
375 close_fd (int fd, const char *filename)
377 if (fd != -1 && fd != STDIN_FILENO && close (fd))
379 error (0, errno, _("closing %s (fd=%d)"), filename, fd);
383 static void
384 write_header (const char *pretty_filename)
386 static bool first_file = true;
388 printf ("%s==> %s <==\n", (first_file ? "" : "\n"), pretty_filename);
389 first_file = false;
392 /* Read and output N_BYTES of file PRETTY_FILENAME starting at the current
393 position in FD. If N_BYTES is COPY_TO_EOF, then copy until end of file.
394 If N_BYTES is COPY_A_BUFFER, then copy at most one buffer's worth.
395 Return the number of bytes read from the file. */
397 static uintmax_t
398 dump_remainder (const char *pretty_filename, int fd, uintmax_t n_bytes)
400 uintmax_t n_written;
401 uintmax_t n_remaining = n_bytes;
403 n_written = 0;
404 while (1)
406 char buffer[BUFSIZ];
407 size_t n = MIN (n_remaining, BUFSIZ);
408 size_t bytes_read = safe_read (fd, buffer, n);
409 if (bytes_read == SAFE_READ_ERROR)
411 if (errno != EAGAIN)
412 error (EXIT_FAILURE, errno, _("error reading %s"),
413 quote (pretty_filename));
414 break;
416 if (bytes_read == 0)
417 break;
418 xwrite_stdout (buffer, bytes_read);
419 n_written += bytes_read;
420 if (n_bytes != COPY_TO_EOF)
422 n_remaining -= bytes_read;
423 if (n_remaining == 0 || n_bytes == COPY_A_BUFFER)
424 break;
428 return n_written;
431 /* Call lseek with the specified arguments, where file descriptor FD
432 corresponds to the file, FILENAME.
433 Give a diagnostic and exit nonzero if lseek fails.
434 Otherwise, return the resulting offset. */
436 static off_t
437 xlseek (int fd, off_t offset, int whence, char const *filename)
439 off_t new_offset = lseek (fd, offset, whence);
440 char buf[INT_BUFSIZE_BOUND (offset)];
441 char *s;
443 if (0 <= new_offset)
444 return new_offset;
446 s = offtostr (offset, buf);
447 switch (whence)
449 case SEEK_SET:
450 error (0, errno, _("%s: cannot seek to offset %s"),
451 filename, s);
452 break;
453 case SEEK_CUR:
454 error (0, errno, _("%s: cannot seek to relative offset %s"),
455 filename, s);
456 break;
457 case SEEK_END:
458 error (0, errno, _("%s: cannot seek to end-relative offset %s"),
459 filename, s);
460 break;
461 default:
462 abort ();
465 exit (EXIT_FAILURE);
468 /* Print the last N_LINES lines from the end of file FD.
469 Go backward through the file, reading `BUFSIZ' bytes at a time (except
470 probably the first), until we hit the start of the file or have
471 read NUMBER newlines.
472 START_POS is the starting position of the read pointer for the file
473 associated with FD (may be nonzero).
474 END_POS is the file offset of EOF (one larger than offset of last byte).
475 Return true if successful. */
477 static bool
478 file_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
479 off_t start_pos, off_t end_pos, uintmax_t *read_pos)
481 char buffer[BUFSIZ];
482 size_t bytes_read;
483 off_t pos = end_pos;
485 if (n_lines == 0)
486 return true;
488 /* Set `bytes_read' to the size of the last, probably partial, buffer;
489 0 < `bytes_read' <= `BUFSIZ'. */
490 bytes_read = (pos - start_pos) % BUFSIZ;
491 if (bytes_read == 0)
492 bytes_read = BUFSIZ;
493 /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
494 reads will be on block boundaries, which might increase efficiency. */
495 pos -= bytes_read;
496 xlseek (fd, pos, SEEK_SET, pretty_filename);
497 bytes_read = safe_read (fd, buffer, bytes_read);
498 if (bytes_read == SAFE_READ_ERROR)
500 error (0, errno, _("error reading %s"), quote (pretty_filename));
501 return false;
503 *read_pos = pos + bytes_read;
505 /* Count the incomplete line on files that don't end with a newline. */
506 if (bytes_read && buffer[bytes_read - 1] != '\n')
507 --n_lines;
511 /* Scan backward, counting the newlines in this bufferfull. */
513 size_t n = bytes_read;
514 while (n)
516 char const *nl;
517 nl = memrchr (buffer, '\n', n);
518 if (nl == NULL)
519 break;
520 n = nl - buffer;
521 if (n_lines-- == 0)
523 /* If this newline isn't the last character in the buffer,
524 output the part that is after it. */
525 if (n != bytes_read - 1)
526 xwrite_stdout (nl + 1, bytes_read - (n + 1));
527 *read_pos += dump_remainder (pretty_filename, fd,
528 end_pos - (pos + bytes_read));
529 return true;
533 /* Not enough newlines in that bufferfull. */
534 if (pos == start_pos)
536 /* Not enough lines in the file; print everything from
537 start_pos to the end. */
538 xlseek (fd, start_pos, SEEK_SET, pretty_filename);
539 *read_pos = start_pos + dump_remainder (pretty_filename, fd,
540 end_pos);
541 return true;
543 pos -= BUFSIZ;
544 xlseek (fd, pos, SEEK_SET, pretty_filename);
546 bytes_read = safe_read (fd, buffer, BUFSIZ);
547 if (bytes_read == SAFE_READ_ERROR)
549 error (0, errno, _("error reading %s"), quote (pretty_filename));
550 return false;
553 *read_pos = pos + bytes_read;
555 while (bytes_read > 0);
557 return true;
560 /* Print the last N_LINES lines from the end of the standard input,
561 open for reading as pipe FD.
562 Buffer the text as a linked list of LBUFFERs, adding them as needed.
563 Return true if successful. */
565 static bool
566 pipe_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
567 uintmax_t *read_pos)
569 struct linebuffer
571 char buffer[BUFSIZ];
572 size_t nbytes;
573 size_t nlines;
574 struct linebuffer *next;
576 typedef struct linebuffer LBUFFER;
577 LBUFFER *first, *last, *tmp;
578 size_t total_lines = 0; /* Total number of newlines in all buffers. */
579 bool ok = true;
580 size_t n_read; /* Size in bytes of most recent read */
582 first = last = xmalloc (sizeof (LBUFFER));
583 first->nbytes = first->nlines = 0;
584 first->next = NULL;
585 tmp = xmalloc (sizeof (LBUFFER));
587 /* Input is always read into a fresh buffer. */
588 while (1)
590 n_read = safe_read (fd, tmp->buffer, BUFSIZ);
591 if (n_read == 0 || n_read == SAFE_READ_ERROR)
592 break;
593 tmp->nbytes = n_read;
594 *read_pos += n_read;
595 tmp->nlines = 0;
596 tmp->next = NULL;
598 /* Count the number of newlines just read. */
600 char const *buffer_end = tmp->buffer + n_read;
601 char const *p = tmp->buffer;
602 while ((p = memchr (p, '\n', buffer_end - p)))
604 ++p;
605 ++tmp->nlines;
608 total_lines += tmp->nlines;
610 /* If there is enough room in the last buffer read, just append the new
611 one to it. This is because when reading from a pipe, `n_read' can
612 often be very small. */
613 if (tmp->nbytes + last->nbytes < BUFSIZ)
615 memcpy (&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
616 last->nbytes += tmp->nbytes;
617 last->nlines += tmp->nlines;
619 else
621 /* If there's not enough room, link the new buffer onto the end of
622 the list, then either free up the oldest buffer for the next
623 read if that would leave enough lines, or else malloc a new one.
624 Some compaction mechanism is possible but probably not
625 worthwhile. */
626 last = last->next = tmp;
627 if (total_lines - first->nlines > n_lines)
629 tmp = first;
630 total_lines -= first->nlines;
631 first = first->next;
633 else
634 tmp = xmalloc (sizeof (LBUFFER));
638 free (tmp);
640 if (n_read == SAFE_READ_ERROR)
642 error (0, errno, _("error reading %s"), quote (pretty_filename));
643 ok = false;
644 goto free_lbuffers;
647 /* If the file is empty, then bail out. */
648 if (last->nbytes == 0)
649 goto free_lbuffers;
651 /* This prevents a core dump when the pipe contains no newlines. */
652 if (n_lines == 0)
653 goto free_lbuffers;
655 /* Count the incomplete line on files that don't end with a newline. */
656 if (last->buffer[last->nbytes - 1] != '\n')
658 ++last->nlines;
659 ++total_lines;
662 /* Run through the list, printing lines. First, skip over unneeded
663 buffers. */
664 for (tmp = first; total_lines - tmp->nlines > n_lines; tmp = tmp->next)
665 total_lines -= tmp->nlines;
667 /* Find the correct beginning, then print the rest of the file. */
669 char const *beg = tmp->buffer;
670 char const *buffer_end = tmp->buffer + tmp->nbytes;
671 if (total_lines > n_lines)
673 /* Skip `total_lines' - `n_lines' newlines. We made sure that
674 `total_lines' - `n_lines' <= `tmp->nlines'. */
675 size_t j;
676 for (j = total_lines - n_lines; j; --j)
678 beg = memchr (beg, '\n', buffer_end - beg);
679 assert (beg);
680 ++beg;
684 xwrite_stdout (beg, buffer_end - beg);
687 for (tmp = tmp->next; tmp; tmp = tmp->next)
688 xwrite_stdout (tmp->buffer, tmp->nbytes);
690 free_lbuffers:
691 while (first)
693 tmp = first->next;
694 free (first);
695 first = tmp;
697 return ok;
700 /* Print the last N_BYTES characters from the end of pipe FD.
701 This is a stripped down version of pipe_lines.
702 Return true if successful. */
704 static bool
705 pipe_bytes (const char *pretty_filename, int fd, uintmax_t n_bytes,
706 uintmax_t *read_pos)
708 struct charbuffer
710 char buffer[BUFSIZ];
711 size_t nbytes;
712 struct charbuffer *next;
714 typedef struct charbuffer CBUFFER;
715 CBUFFER *first, *last, *tmp;
716 size_t i; /* Index into buffers. */
717 size_t total_bytes = 0; /* Total characters in all buffers. */
718 bool ok = true;
719 size_t n_read;
721 first = last = xmalloc (sizeof (CBUFFER));
722 first->nbytes = 0;
723 first->next = NULL;
724 tmp = xmalloc (sizeof (CBUFFER));
726 /* Input is always read into a fresh buffer. */
727 while (1)
729 n_read = safe_read (fd, tmp->buffer, BUFSIZ);
730 if (n_read == 0 || n_read == SAFE_READ_ERROR)
731 break;
732 *read_pos += n_read;
733 tmp->nbytes = n_read;
734 tmp->next = NULL;
736 total_bytes += tmp->nbytes;
737 /* If there is enough room in the last buffer read, just append the new
738 one to it. This is because when reading from a pipe, `nbytes' can
739 often be very small. */
740 if (tmp->nbytes + last->nbytes < BUFSIZ)
742 memcpy (&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
743 last->nbytes += tmp->nbytes;
745 else
747 /* If there's not enough room, link the new buffer onto the end of
748 the list, then either free up the oldest buffer for the next
749 read if that would leave enough characters, or else malloc a new
750 one. Some compaction mechanism is possible but probably not
751 worthwhile. */
752 last = last->next = tmp;
753 if (total_bytes - first->nbytes > n_bytes)
755 tmp = first;
756 total_bytes -= first->nbytes;
757 first = first->next;
759 else
761 tmp = xmalloc (sizeof (CBUFFER));
766 free (tmp);
768 if (n_read == SAFE_READ_ERROR)
770 error (0, errno, _("error reading %s"), quote (pretty_filename));
771 ok = false;
772 goto free_cbuffers;
775 /* Run through the list, printing characters. First, skip over unneeded
776 buffers. */
777 for (tmp = first; total_bytes - tmp->nbytes > n_bytes; tmp = tmp->next)
778 total_bytes -= tmp->nbytes;
780 /* Find the correct beginning, then print the rest of the file.
781 We made sure that `total_bytes' - `n_bytes' <= `tmp->nbytes'. */
782 if (total_bytes > n_bytes)
783 i = total_bytes - n_bytes;
784 else
785 i = 0;
786 xwrite_stdout (&tmp->buffer[i], tmp->nbytes - i);
788 for (tmp = tmp->next; tmp; tmp = tmp->next)
789 xwrite_stdout (tmp->buffer, tmp->nbytes);
791 free_cbuffers:
792 while (first)
794 tmp = first->next;
795 free (first);
796 first = tmp;
798 return ok;
801 /* Skip N_BYTES characters from the start of pipe FD, and print
802 any extra characters that were read beyond that.
803 Return 1 on error, 0 if ok, -1 if EOF. */
805 static int
806 start_bytes (const char *pretty_filename, int fd, uintmax_t n_bytes,
807 uintmax_t *read_pos)
809 char buffer[BUFSIZ];
811 while (0 < n_bytes)
813 size_t bytes_read = safe_read (fd, buffer, BUFSIZ);
814 if (bytes_read == 0)
815 return -1;
816 if (bytes_read == SAFE_READ_ERROR)
818 error (0, errno, _("error reading %s"), quote (pretty_filename));
819 return 1;
821 *read_pos += bytes_read;
822 if (bytes_read <= n_bytes)
823 n_bytes -= bytes_read;
824 else
826 size_t n_remaining = bytes_read - n_bytes;
827 if (n_remaining)
828 xwrite_stdout (&buffer[n_bytes], n_remaining);
829 break;
833 return 0;
836 /* Skip N_LINES lines at the start of file or pipe FD, and print
837 any extra characters that were read beyond that.
838 Return 1 on error, 0 if ok, -1 if EOF. */
840 static int
841 start_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
842 uintmax_t *read_pos)
844 if (n_lines == 0)
845 return 0;
847 while (1)
849 char buffer[BUFSIZ];
850 char *p = buffer;
851 size_t bytes_read = safe_read (fd, buffer, BUFSIZ);
852 char *buffer_end = buffer + bytes_read;
853 if (bytes_read == 0) /* EOF */
854 return -1;
855 if (bytes_read == SAFE_READ_ERROR) /* error */
857 error (0, errno, _("error reading %s"), quote (pretty_filename));
858 return 1;
861 *read_pos += bytes_read;
863 while ((p = memchr (p, '\n', buffer_end - p)))
865 ++p;
866 if (--n_lines == 0)
868 if (p < buffer_end)
869 xwrite_stdout (p, buffer_end - p);
870 return 0;
876 #if HAVE_INOTIFY
877 /* Without inotify support, always return false. Otherwise, return false
878 when FD is open on a file known to reside on a local file system.
879 If fstatfs fails, give a diagnostic and return true.
880 If fstatfs cannot be called, return true. */
881 static bool
882 fremote (int fd, const char *name)
884 bool remote = true; /* be conservative (poll by default). */
886 # if HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE && defined __linux__
887 struct statfs buf;
888 int err = fstatfs (fd, &buf);
889 if (err != 0)
891 /* On at least linux-2.6.38, fstatfs fails with ENOSYS when FD
892 is open on a pipe. Treat that like a remote file. */
893 if (errno != ENOSYS)
894 error (0, errno, _("cannot determine location of %s. "
895 "reverting to polling"), quote (name));
897 else
899 switch (buf.f_type)
901 case S_MAGIC_AFS:
902 case S_MAGIC_CIFS:
903 case S_MAGIC_CODA:
904 case S_MAGIC_FUSEBLK:
905 case S_MAGIC_FUSECTL:
906 case S_MAGIC_GFS:
907 case S_MAGIC_GPFS:
908 case S_MAGIC_FHGFS:
909 case S_MAGIC_KAFS:
910 case S_MAGIC_LUSTRE:
911 case S_MAGIC_NCP:
912 case S_MAGIC_NFS:
913 case S_MAGIC_NFSD:
914 case S_MAGIC_OCFS2:
915 case S_MAGIC_SMB:
916 break;
917 default:
918 remote = false;
921 # endif
923 return remote;
925 #else
926 /* Without inotify support, whether a file is remote is irrelevant.
927 Always return "false" in that case. */
928 # define fremote(fd, name) false
929 #endif
931 /* FIXME: describe */
933 static void
934 recheck (struct File_spec *f, bool blocking)
936 /* open/fstat the file and announce if dev/ino have changed */
937 struct stat new_stats;
938 bool ok = true;
939 bool is_stdin = (STREQ (f->name, "-"));
940 bool was_tailable = f->tailable;
941 int prev_errnum = f->errnum;
942 bool new_file;
943 int fd = (is_stdin
944 ? STDIN_FILENO
945 : open (f->name, O_RDONLY | (blocking ? 0 : O_NONBLOCK)));
947 assert (valid_file_spec (f));
949 /* If the open fails because the file doesn't exist,
950 then mark the file as not tailable. */
951 f->tailable = !(reopen_inaccessible_files && fd == -1);
953 if (fd == -1 || fstat (fd, &new_stats) < 0)
955 ok = false;
956 f->errnum = errno;
957 if (!f->tailable)
959 if (was_tailable)
961 /* FIXME-maybe: detect the case in which the file first becomes
962 unreadable (perms), and later becomes readable again and can
963 be seen to be the same file (dev/ino). Otherwise, tail prints
964 the entire contents of the file when it becomes readable. */
965 error (0, f->errnum, _("%s has become inaccessible"),
966 quote (pretty_name (f)));
968 else
970 /* say nothing... it's still not tailable */
973 else if (prev_errnum != errno)
975 error (0, errno, "%s", pretty_name (f));
978 else if (!IS_TAILABLE_FILE_TYPE (new_stats.st_mode))
980 ok = false;
981 f->errnum = -1;
982 error (0, 0, _("%s has been replaced with an untailable file;\
983 giving up on this name"),
984 quote (pretty_name (f)));
985 f->ignore = true;
987 else if (!disable_inotify && fremote (fd, pretty_name (f)))
989 ok = false;
990 f->errnum = -1;
991 error (0, 0, _("%s has been replaced with a remote file. "
992 "giving up on this name"), quote (pretty_name (f)));
993 f->ignore = true;
994 f->remote = true;
996 else
998 f->errnum = 0;
1001 new_file = false;
1002 if (!ok)
1004 close_fd (fd, pretty_name (f));
1005 close_fd (f->fd, pretty_name (f));
1006 f->fd = -1;
1008 else if (prev_errnum && prev_errnum != ENOENT)
1010 new_file = true;
1011 assert (f->fd == -1);
1012 error (0, 0, _("%s has become accessible"), quote (pretty_name (f)));
1014 else if (f->ino != new_stats.st_ino || f->dev != new_stats.st_dev)
1016 new_file = true;
1017 if (f->fd == -1)
1019 error (0, 0,
1020 _("%s has appeared; following end of new file"),
1021 quote (pretty_name (f)));
1023 else
1025 /* Close the old one. */
1026 close_fd (f->fd, pretty_name (f));
1028 /* File has been replaced (e.g., via log rotation) --
1029 tail the new one. */
1030 error (0, 0,
1031 _("%s has been replaced; following end of new file"),
1032 quote (pretty_name (f)));
1035 else
1037 if (f->fd == -1)
1039 /* This happens when one iteration finds the file missing,
1040 then the preceding <dev,inode> pair is reused as the
1041 file is recreated. */
1042 new_file = true;
1044 else
1046 close_fd (fd, pretty_name (f));
1050 if (new_file)
1052 /* Start at the beginning of the file. */
1053 record_open_fd (f, fd, 0, &new_stats, (is_stdin ? -1 : blocking));
1054 xlseek (fd, 0, SEEK_SET, pretty_name (f));
1058 /* Return true if any of the N_FILES files in F are live, i.e., have
1059 open file descriptors. */
1061 static bool
1062 any_live_files (const struct File_spec *f, size_t n_files)
1064 size_t i;
1066 for (i = 0; i < n_files; i++)
1067 if (0 <= f[i].fd)
1068 return true;
1069 return false;
1072 /* Tail N_FILES files forever, or until killed.
1073 The pertinent information for each file is stored in an entry of F.
1074 Loop over each of them, doing an fstat to see if they have changed size,
1075 and an occasional open/fstat to see if any dev/ino pair has changed.
1076 If none of them have changed size in one iteration, sleep for a
1077 while and try again. Continue until the user interrupts us. */
1079 static void
1080 tail_forever (struct File_spec *f, size_t n_files, double sleep_interval)
1082 /* Use blocking I/O as an optimization, when it's easy. */
1083 bool blocking = (pid == 0 && follow_mode == Follow_descriptor
1084 && n_files == 1 && ! S_ISREG (f[0].mode));
1085 size_t last;
1086 bool writer_is_dead = false;
1088 last = n_files - 1;
1090 while (1)
1092 size_t i;
1093 bool any_input = false;
1095 for (i = 0; i < n_files; i++)
1097 int fd;
1098 char const *name;
1099 mode_t mode;
1100 struct stat stats;
1101 uintmax_t bytes_read;
1103 if (f[i].ignore)
1104 continue;
1106 if (f[i].fd < 0)
1108 recheck (&f[i], blocking);
1109 continue;
1112 fd = f[i].fd;
1113 name = pretty_name (&f[i]);
1114 mode = f[i].mode;
1116 if (f[i].blocking != blocking)
1118 int old_flags = fcntl (fd, F_GETFL);
1119 int new_flags = old_flags | (blocking ? 0 : O_NONBLOCK);
1120 if (old_flags < 0
1121 || (new_flags != old_flags
1122 && fcntl (fd, F_SETFL, new_flags) == -1))
1124 /* Don't update f[i].blocking if fcntl fails. */
1125 if (S_ISREG (f[i].mode) && errno == EPERM)
1127 /* This happens when using tail -f on a file with
1128 the append-only attribute. */
1130 else
1131 error (EXIT_FAILURE, errno,
1132 _("%s: cannot change nonblocking mode"), name);
1134 else
1135 f[i].blocking = blocking;
1138 if (!f[i].blocking)
1140 if (fstat (fd, &stats) != 0)
1142 f[i].fd = -1;
1143 f[i].errnum = errno;
1144 error (0, errno, "%s", name);
1145 continue;
1148 if (f[i].mode == stats.st_mode
1149 && (! S_ISREG (stats.st_mode) || f[i].size == stats.st_size)
1150 && timespec_cmp (f[i].mtime, get_stat_mtime (&stats)) == 0)
1152 if ((max_n_unchanged_stats_between_opens
1153 <= f[i].n_unchanged_stats++)
1154 && follow_mode == Follow_name)
1156 recheck (&f[i], f[i].blocking);
1157 f[i].n_unchanged_stats = 0;
1159 continue;
1162 /* This file has changed. Print out what we can, and
1163 then keep looping. */
1165 f[i].mtime = get_stat_mtime (&stats);
1166 f[i].mode = stats.st_mode;
1168 /* reset counter */
1169 f[i].n_unchanged_stats = 0;
1171 if (S_ISREG (mode) && stats.st_size < f[i].size)
1173 error (0, 0, _("%s: file truncated"), name);
1174 last = i;
1175 xlseek (fd, stats.st_size, SEEK_SET, name);
1176 f[i].size = stats.st_size;
1177 continue;
1180 if (i != last)
1182 if (print_headers)
1183 write_header (name);
1184 last = i;
1188 bytes_read = dump_remainder (name, fd,
1189 (f[i].blocking
1190 ? COPY_A_BUFFER : COPY_TO_EOF));
1191 any_input |= (bytes_read != 0);
1192 f[i].size += bytes_read;
1195 if (! any_live_files (f, n_files) && ! reopen_inaccessible_files)
1197 error (0, 0, _("no files remaining"));
1198 break;
1201 if ((!any_input || blocking) && fflush (stdout) != 0)
1202 error (EXIT_FAILURE, errno, _("write error"));
1204 /* If nothing was read, sleep and/or check for dead writers. */
1205 if (!any_input)
1207 if (writer_is_dead)
1208 break;
1210 /* Once the writer is dead, read the files once more to
1211 avoid a race condition. */
1212 writer_is_dead = (pid != 0
1213 && kill (pid, 0) != 0
1214 /* Handle the case in which you cannot send a
1215 signal to the writer, so kill fails and sets
1216 errno to EPERM. */
1217 && errno != EPERM);
1219 if (!writer_is_dead && xnanosleep (sleep_interval))
1220 error (EXIT_FAILURE, errno, _("cannot read realtime clock"));
1226 #if HAVE_INOTIFY
1228 /* Return true if any of the N_FILES files in F is remote, i.e., has
1229 an open file descriptor and is on a network file system. */
1231 static bool
1232 any_remote_file (const struct File_spec *f, size_t n_files)
1234 size_t i;
1236 for (i = 0; i < n_files; i++)
1237 if (0 <= f[i].fd && f[i].remote)
1238 return true;
1239 return false;
1242 /* Return true if any of the N_FILES files in F represents
1243 stdin and is tailable. */
1245 static bool
1246 tailable_stdin (const struct File_spec *f, size_t n_files)
1248 size_t i;
1250 for (i = 0; i < n_files; i++)
1251 if (!f[i].ignore && STREQ (f[i].name, "-"))
1252 return true;
1253 return false;
1256 static size_t
1257 wd_hasher (const void *entry, size_t tabsize)
1259 const struct File_spec *spec = entry;
1260 return spec->wd % tabsize;
1263 static bool
1264 wd_comparator (const void *e1, const void *e2)
1266 const struct File_spec *spec1 = e1;
1267 const struct File_spec *spec2 = e2;
1268 return spec1->wd == spec2->wd;
1271 /* Helper function used by `tail_forever_inotify'. */
1272 static void
1273 check_fspec (struct File_spec *fspec, int wd, int *prev_wd)
1275 struct stat stats;
1276 char const *name = pretty_name (fspec);
1278 if (fstat (fspec->fd, &stats) != 0)
1280 close_fd (fspec->fd, name);
1281 fspec->fd = -1;
1282 fspec->errnum = errno;
1283 return;
1286 if (S_ISREG (fspec->mode) && stats.st_size < fspec->size)
1288 error (0, 0, _("%s: file truncated"), name);
1289 *prev_wd = wd;
1290 xlseek (fspec->fd, stats.st_size, SEEK_SET, name);
1291 fspec->size = stats.st_size;
1293 else if (S_ISREG (fspec->mode) && stats.st_size == fspec->size
1294 && timespec_cmp (fspec->mtime, get_stat_mtime (&stats)) == 0)
1295 return;
1297 if (wd != *prev_wd)
1299 if (print_headers)
1300 write_header (name);
1301 *prev_wd = wd;
1304 uintmax_t bytes_read = dump_remainder (name, fspec->fd, COPY_TO_EOF);
1305 fspec->size += bytes_read;
1307 if (fflush (stdout) != 0)
1308 error (EXIT_FAILURE, errno, _("write error"));
1311 /* Attempt to tail N_FILES files forever, or until killed.
1312 Check modifications using the inotify events system.
1313 Return false on error, or true to revert to polling. */
1314 static bool
1315 tail_forever_inotify (int wd, struct File_spec *f, size_t n_files,
1316 double sleep_interval)
1318 unsigned int max_realloc = 3;
1320 /* Map an inotify watch descriptor to the name of the file it's watching. */
1321 Hash_table *wd_to_name;
1323 bool found_watchable_file = false;
1324 bool found_unwatchable_dir = false;
1325 bool no_inotify_resources = false;
1326 bool writer_is_dead = false;
1327 int prev_wd;
1328 size_t evlen = 0;
1329 char *evbuf;
1330 size_t evbuf_off = 0;
1331 size_t len = 0;
1333 wd_to_name = hash_initialize (n_files, NULL, wd_hasher, wd_comparator, NULL);
1334 if (! wd_to_name)
1335 xalloc_die ();
1337 /* Add an inotify watch for each watched file. If -F is specified then watch
1338 its parent directory too, in this way when they re-appear we can add them
1339 again to the watch list. */
1340 size_t i;
1341 for (i = 0; i < n_files; i++)
1343 if (!f[i].ignore)
1345 size_t fnlen = strlen (f[i].name);
1346 if (evlen < fnlen)
1347 evlen = fnlen;
1349 f[i].wd = -1;
1351 if (follow_mode == Follow_name)
1353 size_t dirlen = dir_len (f[i].name);
1354 char prev = f[i].name[dirlen];
1355 f[i].basename_start = last_component (f[i].name) - f[i].name;
1357 f[i].name[dirlen] = '\0';
1359 /* It's fine to add the same directory more than once.
1360 In that case the same watch descriptor is returned. */
1361 f[i].parent_wd = inotify_add_watch (wd, dirlen ? f[i].name : ".",
1362 (IN_CREATE | IN_MOVED_TO
1363 | IN_ATTRIB));
1365 f[i].name[dirlen] = prev;
1367 if (f[i].parent_wd < 0)
1369 if (errno != ENOSPC) /* suppress confusing error. */
1370 error (0, errno, _("cannot watch parent directory of %s"),
1371 quote (f[i].name));
1372 else
1373 error (0, 0, _("inotify resources exhausted"));
1374 found_unwatchable_dir = true;
1375 /* We revert to polling below. Note invalid uses
1376 of the inotify API will still be diagnosed. */
1377 break;
1381 f[i].wd = inotify_add_watch (wd, f[i].name, inotify_wd_mask);
1383 if (f[i].wd < 0)
1385 if (errno == ENOSPC)
1387 no_inotify_resources = true;
1388 error (0, 0, _("inotify resources exhausted"));
1390 else if (errno != f[i].errnum)
1391 error (0, errno, _("cannot watch %s"), quote (f[i].name));
1392 continue;
1395 if (hash_insert (wd_to_name, &(f[i])) == NULL)
1396 xalloc_die ();
1398 found_watchable_file = true;
1402 /* Linux kernel 2.6.24 at least has a bug where eventually, ENOSPC is always
1403 returned by inotify_add_watch. In any case we should revert to polling
1404 when there are no inotify resources. Also a specified directory may not
1405 be currently present or accessible, so revert to polling. */
1406 if (no_inotify_resources || found_unwatchable_dir)
1408 /* FIXME: release hash and inotify resources allocated above. */
1409 errno = 0;
1410 return true;
1412 if (follow_mode == Follow_descriptor && !found_watchable_file)
1413 return false;
1415 prev_wd = f[n_files - 1].wd;
1417 /* Check files again. New data can be available since last time we checked
1418 and before they are watched by inotify. */
1419 for (i = 0; i < n_files; i++)
1421 if (!f[i].ignore)
1422 check_fspec (&f[i], f[i].wd, &prev_wd);
1425 evlen += sizeof (struct inotify_event) + 1;
1426 evbuf = xmalloc (evlen);
1428 /* Wait for inotify events and handle them. Events on directories
1429 ensure that watched files can be re-added when following by name.
1430 This loop blocks on the `safe_read' call until a new event is notified.
1431 But when --pid=P is specified, tail usually waits via the select. */
1432 while (1)
1434 struct File_spec *fspec;
1435 struct inotify_event *ev;
1437 /* When following by name without --retry, and the last file has
1438 been unlinked or renamed-away, diagnose it and return. */
1439 if (follow_mode == Follow_name
1440 && ! reopen_inaccessible_files
1441 && hash_get_n_entries (wd_to_name) == 0)
1443 error (0, 0, _("no files remaining"));
1444 return false;
1447 /* When watching a PID, ensure that a read from WD will not block
1448 indefinitely. */
1449 if (pid)
1451 if (writer_is_dead)
1452 exit (EXIT_SUCCESS);
1454 writer_is_dead = (kill (pid, 0) != 0 && errno != EPERM);
1456 struct timeval delay; /* how long to wait for file changes. */
1457 if (writer_is_dead)
1458 delay.tv_sec = delay.tv_usec = 0;
1459 else
1461 delay.tv_sec = (time_t) sleep_interval;
1462 delay.tv_usec = 1000000 * (sleep_interval - delay.tv_sec);
1465 fd_set rfd;
1466 FD_ZERO (&rfd);
1467 FD_SET (wd, &rfd);
1469 int file_change = select (wd + 1, &rfd, NULL, NULL, &delay);
1471 if (file_change == 0)
1472 continue;
1473 else if (file_change == -1)
1474 error (EXIT_FAILURE, errno, _("error monitoring inotify event"));
1477 if (len <= evbuf_off)
1479 len = safe_read (wd, evbuf, evlen);
1480 evbuf_off = 0;
1482 /* For kernels prior to 2.6.21, read returns 0 when the buffer
1483 is too small. */
1484 if ((len == 0 || (len == SAFE_READ_ERROR && errno == EINVAL))
1485 && max_realloc--)
1487 len = 0;
1488 evlen *= 2;
1489 evbuf = xrealloc (evbuf, evlen);
1490 continue;
1493 if (len == 0 || len == SAFE_READ_ERROR)
1494 error (EXIT_FAILURE, errno, _("error reading inotify event"));
1497 ev = (struct inotify_event *) (evbuf + evbuf_off);
1498 evbuf_off += sizeof (*ev) + ev->len;
1500 if (ev->len) /* event on ev->name in watched directory */
1502 size_t j;
1503 for (j = 0; j < n_files; j++)
1505 /* With N=hundreds of frequently-changing files, this O(N^2)
1506 process might be a problem. FIXME: use a hash table? */
1507 if (f[j].parent_wd == ev->wd
1508 && STREQ (ev->name, f[j].name + f[j].basename_start))
1509 break;
1512 /* It is not a watched file. */
1513 if (j == n_files)
1514 continue;
1516 /* It's fine to add the same file more than once. */
1517 int new_wd = inotify_add_watch (wd, f[j].name, inotify_wd_mask);
1518 if (new_wd < 0)
1520 error (0, errno, _("cannot watch %s"), quote (f[j].name));
1521 continue;
1524 fspec = &(f[j]);
1526 /* Remove `fspec' and re-add it using `new_fd' as its key. */
1527 hash_delete (wd_to_name, fspec);
1528 fspec->wd = new_wd;
1530 /* If the file was moved then inotify will use the source file wd for
1531 the destination file. Make sure the key is not present in the
1532 table. */
1533 struct File_spec *prev = hash_delete (wd_to_name, fspec);
1534 if (prev && prev != fspec)
1536 if (follow_mode == Follow_name)
1537 recheck (prev, false);
1538 prev->wd = -1;
1539 close_fd (prev->fd, pretty_name (prev));
1542 if (hash_insert (wd_to_name, fspec) == NULL)
1543 xalloc_die ();
1545 if (follow_mode == Follow_name)
1546 recheck (fspec, false);
1548 else
1550 struct File_spec key;
1551 key.wd = ev->wd;
1552 fspec = hash_lookup (wd_to_name, &key);
1555 if (! fspec)
1556 continue;
1558 if (ev->mask & (IN_ATTRIB | IN_DELETE_SELF | IN_MOVE_SELF))
1560 /* For IN_DELETE_SELF, we always want to remove the watch.
1561 However, for IN_MOVE_SELF (the file we're watching has
1562 been clobbered via a rename), when tailing by NAME, we
1563 must continue to watch the file. It's only when following
1564 by file descriptor that we must remove the watch. */
1565 if ((ev->mask & IN_DELETE_SELF)
1566 || ((ev->mask & IN_MOVE_SELF)
1567 && follow_mode == Follow_descriptor))
1569 inotify_rm_watch (wd, fspec->wd);
1570 hash_delete (wd_to_name, fspec);
1572 if (follow_mode == Follow_name)
1573 recheck (fspec, false);
1575 continue;
1577 check_fspec (fspec, ev->wd, &prev_wd);
1580 #endif
1582 /* Output the last N_BYTES bytes of file FILENAME open for reading in FD.
1583 Return true if successful. */
1585 static bool
1586 tail_bytes (const char *pretty_filename, int fd, uintmax_t n_bytes,
1587 uintmax_t *read_pos)
1589 struct stat stats;
1591 if (fstat (fd, &stats))
1593 error (0, errno, _("cannot fstat %s"), quote (pretty_filename));
1594 return false;
1597 if (from_start)
1599 if ( ! presume_input_pipe
1600 && S_ISREG (stats.st_mode) && n_bytes <= OFF_T_MAX)
1602 xlseek (fd, n_bytes, SEEK_CUR, pretty_filename);
1603 *read_pos += n_bytes;
1605 else
1607 int t = start_bytes (pretty_filename, fd, n_bytes, read_pos);
1608 if (t)
1609 return t < 0;
1611 *read_pos += dump_remainder (pretty_filename, fd, COPY_TO_EOF);
1613 else
1615 if ( ! presume_input_pipe
1616 && S_ISREG (stats.st_mode) && n_bytes <= OFF_T_MAX)
1618 off_t current_pos = xlseek (fd, 0, SEEK_CUR, pretty_filename);
1619 off_t end_pos = xlseek (fd, 0, SEEK_END, pretty_filename);
1620 off_t diff = end_pos - current_pos;
1621 /* Be careful here. The current position may actually be
1622 beyond the end of the file. */
1623 off_t bytes_remaining = diff < 0 ? 0 : diff;
1624 off_t nb = n_bytes;
1626 if (bytes_remaining <= nb)
1628 /* From the current position to end of file, there are no
1629 more bytes than have been requested. So reposition the
1630 file pointer to the incoming current position and print
1631 everything after that. */
1632 *read_pos = xlseek (fd, current_pos, SEEK_SET, pretty_filename);
1634 else
1636 /* There are more bytes remaining than were requested.
1637 Back up. */
1638 *read_pos = xlseek (fd, -nb, SEEK_END, pretty_filename);
1640 *read_pos += dump_remainder (pretty_filename, fd, n_bytes);
1642 else
1643 return pipe_bytes (pretty_filename, fd, n_bytes, read_pos);
1645 return true;
1648 /* Output the last N_LINES lines of file FILENAME open for reading in FD.
1649 Return true if successful. */
1651 static bool
1652 tail_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
1653 uintmax_t *read_pos)
1655 struct stat stats;
1657 if (fstat (fd, &stats))
1659 error (0, errno, _("cannot fstat %s"), quote (pretty_filename));
1660 return false;
1663 if (from_start)
1665 int t = start_lines (pretty_filename, fd, n_lines, read_pos);
1666 if (t)
1667 return t < 0;
1668 *read_pos += dump_remainder (pretty_filename, fd, COPY_TO_EOF);
1670 else
1672 off_t start_pos = -1;
1673 off_t end_pos;
1675 /* Use file_lines only if FD refers to a regular file for
1676 which lseek (... SEEK_END) works. */
1677 if ( ! presume_input_pipe
1678 && S_ISREG (stats.st_mode)
1679 && (start_pos = lseek (fd, 0, SEEK_CUR)) != -1
1680 && start_pos < (end_pos = lseek (fd, 0, SEEK_END)))
1682 *read_pos = end_pos;
1683 if (end_pos != 0
1684 && ! file_lines (pretty_filename, fd, n_lines,
1685 start_pos, end_pos, read_pos))
1686 return false;
1688 else
1690 /* Under very unlikely circumstances, it is possible to reach
1691 this point after positioning the file pointer to end of file
1692 via the `lseek (...SEEK_END)' above. In that case, reposition
1693 the file pointer back to start_pos before calling pipe_lines. */
1694 if (start_pos != -1)
1695 xlseek (fd, start_pos, SEEK_SET, pretty_filename);
1697 return pipe_lines (pretty_filename, fd, n_lines, read_pos);
1700 return true;
1703 /* Display the last N_UNITS units of file FILENAME, open for reading
1704 via FD. Set *READ_POS to the position of the input stream pointer.
1705 *READ_POS is usually the number of bytes read and corresponds to an
1706 offset from the beginning of a file. However, it may be larger than
1707 OFF_T_MAX (as for an input pipe), and may also be larger than the
1708 number of bytes read (when an input pointer is initially not at
1709 beginning of file), and may be far greater than the number of bytes
1710 actually read for an input file that is seekable.
1711 Return true if successful. */
1713 static bool
1714 tail (const char *filename, int fd, uintmax_t n_units,
1715 uintmax_t *read_pos)
1717 *read_pos = 0;
1718 if (count_lines)
1719 return tail_lines (filename, fd, n_units, read_pos);
1720 else
1721 return tail_bytes (filename, fd, n_units, read_pos);
1724 /* Display the last N_UNITS units of the file described by F.
1725 Return true if successful. */
1727 static bool
1728 tail_file (struct File_spec *f, uintmax_t n_units)
1730 int fd;
1731 bool ok;
1733 bool is_stdin = (STREQ (f->name, "-"));
1735 if (is_stdin)
1737 have_read_stdin = true;
1738 fd = STDIN_FILENO;
1739 if (O_BINARY && ! isatty (STDIN_FILENO))
1740 xfreopen (NULL, "rb", stdin);
1742 else
1743 fd = open (f->name, O_RDONLY | O_BINARY);
1745 f->tailable = !(reopen_inaccessible_files && fd == -1);
1747 if (fd == -1)
1749 if (forever)
1751 f->fd = -1;
1752 f->errnum = errno;
1753 f->ignore = false;
1754 f->ino = 0;
1755 f->dev = 0;
1757 error (0, errno, _("cannot open %s for reading"),
1758 quote (pretty_name (f)));
1759 ok = false;
1761 else
1763 uintmax_t read_pos;
1765 if (print_headers)
1766 write_header (pretty_name (f));
1767 ok = tail (pretty_name (f), fd, n_units, &read_pos);
1768 if (forever)
1770 struct stat stats;
1772 #if TEST_RACE_BETWEEN_FINAL_READ_AND_INITIAL_FSTAT
1773 /* Before the tail function provided `read_pos', there was
1774 a race condition described in the URL below. This sleep
1775 call made the window big enough to exercise the problem. */
1776 xnanosleep (1);
1777 #endif
1778 f->errnum = ok - 1;
1779 if (fstat (fd, &stats) < 0)
1781 ok = false;
1782 f->errnum = errno;
1783 error (0, errno, _("error reading %s"), quote (pretty_name (f)));
1785 else if (!IS_TAILABLE_FILE_TYPE (stats.st_mode))
1787 error (0, 0, _("%s: cannot follow end of this type of file;\
1788 giving up on this name"),
1789 pretty_name (f));
1790 ok = false;
1791 f->errnum = -1;
1792 f->ignore = true;
1795 if (!ok)
1797 close_fd (fd, pretty_name (f));
1798 f->fd = -1;
1800 else
1802 /* Note: we must use read_pos here, not stats.st_size,
1803 to avoid a race condition described by Ken Raeburn:
1804 http://mail.gnu.org/archive/html/bug-textutils/2003-05/msg00007.html */
1805 record_open_fd (f, fd, read_pos, &stats, (is_stdin ? -1 : 1));
1806 f->remote = fremote (fd, pretty_name (f));
1809 else
1811 if (!is_stdin && close (fd))
1813 error (0, errno, _("error reading %s"), quote (pretty_name (f)));
1814 ok = false;
1819 return ok;
1822 /* If obsolete usage is allowed, and the command line arguments are of
1823 the obsolete form and the option string is well-formed, set
1824 *N_UNITS, the globals COUNT_LINES, FOREVER, and FROM_START, and
1825 return true. If the command line arguments are obviously incorrect
1826 (e.g., because obsolete usage is not allowed and the arguments are
1827 incorrect for non-obsolete usage), report an error and exit.
1828 Otherwise, return false and don't modify any parameter or global
1829 variable. */
1831 static bool
1832 parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
1834 const char *p;
1835 const char *n_string;
1836 const char *n_string_end;
1837 bool obsolete_usage;
1838 int default_count = DEFAULT_N_LINES;
1839 bool t_from_start;
1840 bool t_count_lines = true;
1841 bool t_forever = false;
1843 /* With the obsolete form, there is one option string and at most
1844 one file argument. Watch out for "-" and "--", though. */
1845 if (! (argc == 2
1846 || (argc == 3 && ! (argv[2][0] == '-' && argv[2][1]))
1847 || (3 <= argc && argc <= 4 && STREQ (argv[2], "--"))))
1848 return false;
1850 obsolete_usage = (posix2_version () < 200112);
1851 p = argv[1];
1853 switch (*p++)
1855 default:
1856 return false;
1858 case '+':
1859 /* Leading "+" is a file name in the non-obsolete form. */
1860 if (!obsolete_usage)
1861 return false;
1863 t_from_start = true;
1864 break;
1866 case '-':
1867 /* In the non-obsolete form, "-" is standard input and "-c"
1868 requires an option-argument. The obsolete multidigit options
1869 are supported as a GNU extension even when conforming to
1870 POSIX 1003.1-2001, so don't complain about them. */
1871 if (!obsolete_usage && !p[p[0] == 'c'])
1872 return false;
1874 t_from_start = false;
1875 break;
1878 n_string = p;
1879 while (ISDIGIT (*p))
1880 p++;
1881 n_string_end = p;
1883 switch (*p)
1885 case 'b': default_count *= 512; /* Fall through. */
1886 case 'c': t_count_lines = false; /* Fall through. */
1887 case 'l': p++; break;
1890 if (*p == 'f')
1892 t_forever = true;
1893 ++p;
1896 if (*p)
1897 return false;
1899 if (n_string == n_string_end)
1900 *n_units = default_count;
1901 else if ((xstrtoumax (n_string, NULL, 10, n_units, "b")
1902 & ~LONGINT_INVALID_SUFFIX_CHAR)
1903 != LONGINT_OK)
1904 error (EXIT_FAILURE, 0, _("number in %s is too large"), quote (argv[1]));
1906 /* Set globals. */
1907 from_start = t_from_start;
1908 count_lines = t_count_lines;
1909 forever = t_forever;
1911 return true;
1914 static void
1915 parse_options (int argc, char **argv,
1916 uintmax_t *n_units, enum header_mode *header_mode,
1917 double *sleep_interval)
1919 int c;
1921 while ((c = getopt_long (argc, argv, "c:n:fFqs:v0123456789",
1922 long_options, NULL))
1923 != -1)
1925 switch (c)
1927 case 'F':
1928 forever = true;
1929 follow_mode = Follow_name;
1930 reopen_inaccessible_files = true;
1931 break;
1933 case 'c':
1934 case 'n':
1935 count_lines = (c == 'n');
1936 if (*optarg == '+')
1937 from_start = true;
1938 else if (*optarg == '-')
1939 ++optarg;
1942 strtol_error s_err;
1943 s_err = xstrtoumax (optarg, NULL, 10, n_units, "bkKmMGTPEZY0");
1944 if (s_err != LONGINT_OK)
1946 error (EXIT_FAILURE, 0, "%s: %s", optarg,
1947 (c == 'n'
1948 ? _("invalid number of lines")
1949 : _("invalid number of bytes")));
1952 break;
1954 case 'f':
1955 case LONG_FOLLOW_OPTION:
1956 forever = true;
1957 if (optarg == NULL)
1958 follow_mode = DEFAULT_FOLLOW_MODE;
1959 else
1960 follow_mode = XARGMATCH ("--follow", optarg,
1961 follow_mode_string, follow_mode_map);
1962 break;
1964 case RETRY_OPTION:
1965 reopen_inaccessible_files = true;
1966 break;
1968 case MAX_UNCHANGED_STATS_OPTION:
1969 /* --max-unchanged-stats=N */
1970 if (xstrtoumax (optarg, NULL, 10,
1971 &max_n_unchanged_stats_between_opens,
1973 != LONGINT_OK)
1975 error (EXIT_FAILURE, 0,
1976 _("%s: invalid maximum number of unchanged stats between opens"),
1977 optarg);
1979 break;
1981 case DISABLE_INOTIFY_OPTION:
1982 disable_inotify = true;
1983 break;
1985 case PID_OPTION:
1987 strtol_error s_err;
1988 unsigned long int tmp_ulong;
1989 s_err = xstrtoul (optarg, NULL, 10, &tmp_ulong, "");
1990 if (s_err != LONGINT_OK || tmp_ulong > PID_T_MAX)
1992 error (EXIT_FAILURE, 0, _("%s: invalid PID"), optarg);
1994 pid = tmp_ulong;
1996 break;
1998 case PRESUME_INPUT_PIPE_OPTION:
1999 presume_input_pipe = true;
2000 break;
2002 case 'q':
2003 *header_mode = never;
2004 break;
2006 case 's':
2008 double s;
2009 if (! (xstrtod (optarg, NULL, &s, c_strtod) && 0 <= s))
2010 error (EXIT_FAILURE, 0,
2011 _("%s: invalid number of seconds"), optarg);
2012 *sleep_interval = s;
2014 break;
2016 case 'v':
2017 *header_mode = always;
2018 break;
2020 case_GETOPT_HELP_CHAR;
2022 case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
2024 case '0': case '1': case '2': case '3': case '4':
2025 case '5': case '6': case '7': case '8': case '9':
2026 error (EXIT_FAILURE, 0,
2027 _("option used in invalid context -- %c"), c);
2029 default:
2030 usage (EXIT_FAILURE);
2034 if (reopen_inaccessible_files && follow_mode != Follow_name)
2035 error (0, 0, _("warning: --retry is useful mainly when following by name"));
2037 if (pid && !forever)
2038 error (0, 0,
2039 _("warning: PID ignored; --pid=PID is useful only when following"));
2040 else if (pid && kill (pid, 0) != 0 && errno == ENOSYS)
2042 error (0, 0, _("warning: --pid=PID is not supported on this system"));
2043 pid = 0;
2047 /* Mark as '.ignore'd each member of F that corresponds to a
2048 pipe or fifo, and return the number of non-ignored members. */
2049 static size_t
2050 ignore_fifo_and_pipe (struct File_spec *f, size_t n_files)
2052 /* When there is no FILE operand and stdin is a pipe or FIFO
2053 POSIX requires that tail ignore the -f option.
2054 Since we allow multiple FILE operands, we extend that to say: with -f,
2055 ignore any "-" operand that corresponds to a pipe or FIFO. */
2056 size_t n_viable = 0;
2058 size_t i;
2059 for (i = 0; i < n_files; i++)
2061 bool is_a_fifo_or_pipe =
2062 (STREQ (f[i].name, "-")
2063 && !f[i].ignore
2064 && 0 <= f[i].fd
2065 && (S_ISFIFO (f[i].mode)
2066 || (HAVE_FIFO_PIPES != 1 && isapipe (f[i].fd))));
2067 if (is_a_fifo_or_pipe)
2068 f[i].ignore = true;
2069 else
2070 ++n_viable;
2073 return n_viable;
2077 main (int argc, char **argv)
2079 enum header_mode header_mode = multiple_files;
2080 bool ok = true;
2081 /* If from_start, the number of items to skip before printing; otherwise,
2082 the number of items at the end of the file to print. Although the type
2083 is signed, the value is never negative. */
2084 uintmax_t n_units = DEFAULT_N_LINES;
2085 size_t n_files;
2086 char **file;
2087 struct File_spec *F;
2088 size_t i;
2089 bool obsolete_option;
2091 /* The number of seconds to sleep between iterations.
2092 During one iteration, every file name or descriptor is checked to
2093 see if it has changed. */
2094 double sleep_interval = 1.0;
2096 initialize_main (&argc, &argv);
2097 set_program_name (argv[0]);
2098 setlocale (LC_ALL, "");
2099 bindtextdomain (PACKAGE, LOCALEDIR);
2100 textdomain (PACKAGE);
2102 atexit (close_stdout);
2104 have_read_stdin = false;
2106 count_lines = true;
2107 forever = from_start = print_headers = false;
2108 obsolete_option = parse_obsolete_option (argc, argv, &n_units);
2109 argc -= obsolete_option;
2110 argv += obsolete_option;
2111 parse_options (argc, argv, &n_units, &header_mode, &sleep_interval);
2113 /* To start printing with item N_UNITS from the start of the file, skip
2114 N_UNITS - 1 items. `tail -n +0' is actually meaningless, but for Unix
2115 compatibility it's treated the same as `tail -n +1'. */
2116 if (from_start)
2118 if (n_units)
2119 --n_units;
2122 if (optind < argc)
2124 n_files = argc - optind;
2125 file = argv + optind;
2127 else
2129 static char *dummy_stdin = (char *) "-";
2130 n_files = 1;
2131 file = &dummy_stdin;
2135 bool found_hyphen = false;
2137 for (i = 0; i < n_files; i++)
2138 if (STREQ (file[i], "-"))
2139 found_hyphen = true;
2141 /* When following by name, there must be a name. */
2142 if (found_hyphen && follow_mode == Follow_name)
2143 error (EXIT_FAILURE, 0, _("cannot follow %s by name"), quote ("-"));
2145 /* When following forever, warn if any file is `-'.
2146 This is only a warning, since tail's output (before a failing seek,
2147 and that from any non-stdin files) might still be useful. */
2148 if (forever && found_hyphen && isatty (STDIN_FILENO))
2149 error (0, 0, _("warning: following standard input"
2150 " indefinitely is ineffective"));
2153 F = xnmalloc (n_files, sizeof *F);
2154 for (i = 0; i < n_files; i++)
2155 F[i].name = file[i];
2157 if (header_mode == always
2158 || (header_mode == multiple_files && n_files > 1))
2159 print_headers = true;
2161 if (O_BINARY && ! isatty (STDOUT_FILENO))
2162 xfreopen (NULL, "wb", stdout);
2164 for (i = 0; i < n_files; i++)
2165 ok &= tail_file (&F[i], n_units);
2167 if (forever && ignore_fifo_and_pipe (F, n_files))
2169 #if HAVE_INOTIFY
2170 /* tailable_stdin() checks if the user specifies stdin via "-",
2171 or implicitly by providing no arguments. If so, we won't use inotify.
2172 Technically, on systems with a working /dev/stdin, we *could*,
2173 but would it be worth it? Verifying that it's a real device
2174 and hooked up to stdin is not trivial, while reverting to
2175 non-inotify-based tail_forever is easy and portable.
2177 any_remote_file() checks if the user has specified any
2178 files that reside on remote file systems. inotify is not used
2179 in this case because it would miss any updates to the file
2180 that were not initiated from the local system.
2182 FIXME: inotify doesn't give any notification when a new
2183 (remote) file or directory is mounted on top a watched file.
2184 When follow_mode == Follow_name we would ideally like to detect that.
2185 Note if there is a change to the original file then we'll
2186 recheck it and follow the new file, or ignore it if the
2187 file has changed to being remote.
2189 FIXME: when using inotify, and a directory for a watched file
2190 is recreated, then we don't recheck any new file when
2191 follow_mode == Follow_name */
2192 if (!disable_inotify && (tailable_stdin (F, n_files)
2193 || any_remote_file (F, n_files)))
2194 disable_inotify = true;
2196 if (!disable_inotify)
2198 int wd = inotify_init ();
2199 if (0 <= wd)
2201 /* Flush any output from tail_file, now, since
2202 tail_forever_inotify flushes only after writing,
2203 not before reading. */
2204 if (fflush (stdout) != 0)
2205 error (EXIT_FAILURE, errno, _("write error"));
2207 if (!tail_forever_inotify (wd, F, n_files, sleep_interval))
2208 exit (EXIT_FAILURE);
2210 error (0, errno, _("inotify cannot be used, reverting to polling"));
2212 #endif
2213 disable_inotify = true;
2214 tail_forever (F, n_files, sleep_interval);
2217 if (have_read_stdin && close (STDIN_FILENO) < 0)
2218 error (EXIT_FAILURE, errno, "-");
2219 exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);