1 /* tail -- output the last part of file(s)
2 Copyright (C) 1989-2024 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 <https://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
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>. */
30 #include <sys/types.h>
36 #include "cl-strtod.h"
42 #include "safe-read.h"
43 #include "stat-size.h"
44 #include "stat-time.h"
45 #include "xbinary-io.h"
46 #include "xdectoint.h"
47 #include "xnanosleep.h"
54 # include <sys/inotify.h>
57 /* Linux can optimize the handling of local files. */
58 #if defined __linux__ || defined __ANDROID__
60 # include "fs-is-local.h"
61 # if HAVE_SYS_STATFS_H
62 # include <sys/statfs.h>
68 /* The official name of this program (e.g., no 'g' prefix). */
69 #define PROGRAM_NAME "tail"
72 proper_name ("Paul Rubin"), \
73 proper_name ("David MacKenzie"), \
74 proper_name ("Ian Lance Taylor"), \
75 proper_name ("Jim Meyering")
77 /* Number of items to tail. */
78 #define DEFAULT_N_LINES 10
80 /* Special values for dump_remainder's N_BYTES parameter. */
81 #define COPY_TO_EOF UINTMAX_MAX
82 #define COPY_A_BUFFER (UINTMAX_MAX - 1)
84 /* FIXME: make Follow_name the default? */
85 #define DEFAULT_FOLLOW_MODE Follow_descriptor
89 /* Follow the name of each file: if the file is renamed, try to reopen
90 that name and track the end of the new file if/when it's recreated.
91 This is useful for tracking logs that are occasionally rotated. */
94 /* Follow each descriptor obtained upon opening a file.
95 That means we'll continue to follow the end of a file even after
96 it has been renamed or unlinked. */
100 /* The types of files for which tail works. */
101 #define IS_TAILABLE_FILE_TYPE(Mode) \
102 (S_ISREG (Mode) || S_ISFIFO (Mode) || S_ISSOCK (Mode) || S_ISCHR (Mode))
104 static char const *const follow_mode_string
[] =
106 "descriptor", "name", nullptr
109 static enum Follow_mode
const follow_mode_map
[] =
111 Follow_descriptor
, Follow_name
,
116 /* The actual file name, or "-" for stdin. */
119 /* Attributes of the file the last time we checked. */
121 struct timespec mtime
;
126 /* The specified name initially referred to a directory or some other
127 type for which tail isn't meaningful. Unlike for a permission problem
128 (tailable, below) once this is set, the name is not checked ever again. */
131 /* See the description of fremote. */
134 /* A file is tailable if it exists, is readable, and is of type
135 IS_TAILABLE_FILE_TYPE. */
138 /* File descriptor on which the file is open; -1 if it's not open. */
141 /* The value of errno seen last time we checked this file. */
144 /* 1 if O_NONBLOCK is clear, 0 if set, -1 if not known. */
148 /* The watch descriptor used by inotify. */
151 /* The parent directory watch descriptor. It is used only
152 * when Follow_name is used. */
155 /* Offset in NAME of the basename part. */
156 size_t basename_start
;
159 /* See description of DEFAULT_MAX_N_... below. */
160 uintmax_t n_unchanged_stats
;
163 /* Keep trying to open a file even if it is inaccessible when tail starts
164 or if it becomes inaccessible later -- useful only with -f. */
165 static bool reopen_inaccessible_files
;
167 /* If true, interpret the numeric argument as the number of lines.
168 Otherwise, interpret it as the number of bytes. */
169 static bool count_lines
;
171 /* Whether we follow the name of each file or the file descriptor
172 that is initially associated with each name. */
173 static enum Follow_mode follow_mode
= Follow_descriptor
;
175 /* If true, read from the ends of all specified files until killed. */
178 /* If true, monitor output so we exit if pipe reader terminates. */
179 static bool monitor_output
;
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 /* Character to split lines by. */
188 static char line_end
;
190 /* When to print the filename banners. */
193 multiple_files
, always
, never
196 /* When tailing a file by name, if there have been this many consecutive
197 iterations for which the file has not changed, then open/fstat
198 the file to determine if that file name is still associated with the
199 same device/inode-number pair as before. This option is meaningful only
200 when following by name. --max-unchanged-stats=N */
201 #define DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS 5
202 static uintmax_t max_n_unchanged_stats_between_opens
=
203 DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS
;
205 /* The process IDs of the processes to watch (those writing the followed
206 files, or perhaps other processes the user cares about). */
207 static int nbpids
= 0;
208 static pid_t
* pids
= nullptr;
209 static idx_t pids_alloc
;
211 /* Used to determine the buffer size when scanning backwards in a file. */
212 static idx_t page_size
;
214 /* True if we have ever read standard input. */
215 static bool have_read_stdin
;
217 /* If nonzero, skip the is-regular-file test used to determine whether
218 to use the lseek optimization. Instead, use the more general (and
219 more expensive) code unconditionally. Intended solely for testing. */
220 static bool presume_input_pipe
;
222 /* If nonzero then don't use inotify even if available. */
223 static bool disable_inotify
;
225 /* For long options that have no equivalent short option, use a
226 non-character as a pseudo short option, starting with CHAR_MAX + 1. */
229 RETRY_OPTION
= CHAR_MAX
+ 1,
230 MAX_UNCHANGED_STATS_OPTION
,
232 PRESUME_INPUT_PIPE_OPTION
,
234 DISABLE_INOTIFY_OPTION
237 static struct option
const long_options
[] =
239 {"bytes", required_argument
, nullptr, 'c'},
240 {"follow", optional_argument
, nullptr, LONG_FOLLOW_OPTION
},
241 {"lines", required_argument
, nullptr, 'n'},
242 {"max-unchanged-stats", required_argument
, nullptr,
243 MAX_UNCHANGED_STATS_OPTION
},
244 {"-disable-inotify", no_argument
, nullptr,
245 DISABLE_INOTIFY_OPTION
}, /* do not document */
246 {"pid", required_argument
, nullptr, PID_OPTION
},
247 {"-presume-input-pipe", no_argument
, nullptr,
248 PRESUME_INPUT_PIPE_OPTION
}, /* do not document */
249 {"quiet", no_argument
, nullptr, 'q'},
250 {"retry", no_argument
, nullptr, RETRY_OPTION
},
251 {"silent", no_argument
, nullptr, 'q'},
252 {"sleep-interval", required_argument
, nullptr, 's'},
253 {"verbose", no_argument
, nullptr, 'v'},
254 {"zero-terminated", no_argument
, nullptr, 'z'},
255 {GETOPT_HELP_OPTION_DECL
},
256 {GETOPT_VERSION_OPTION_DECL
},
257 {nullptr, 0, nullptr, 0}
263 if (status
!= EXIT_SUCCESS
)
268 Usage: %s [OPTION]... [FILE]...\n\
272 Print the last %d lines of each FILE to standard output.\n\
273 With more than one FILE, precede each with a header giving the file name.\n\
274 "), DEFAULT_N_LINES
);
277 emit_mandatory_arg_note ();
280 -c, --bytes=[+]NUM output the last NUM bytes; or use -c +NUM to\n\
281 output starting with byte NUM of each file\n\
284 -f, --follow[={name|descriptor}]\n\
285 output appended data as the file grows;\n\
286 an absent option argument means 'descriptor'\n\
287 -F same as --follow=name --retry\n\
290 -n, --lines=[+]NUM output the last NUM lines, instead of the last %d;\n\
291 or use -n +NUM to skip NUM-1 lines at the start\n\
296 --max-unchanged-stats=N\n\
297 with --follow=name, reopen a FILE which has not\n\
298 changed size after N (default %d) iterations\n\
299 to see if it has been unlinked or renamed\n\
300 (this is the usual case of rotated log files);\n\
301 with inotify, this option is rarely useful\n\
303 DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS
306 --pid=PID with -f, terminate after process ID, PID dies;\n\
307 can be repeated to watch multiple processes\n\
308 -q, --quiet, --silent never output headers giving file names\n\
309 --retry keep trying to open a file if it is inaccessible\n\
312 -s, --sleep-interval=N with -f, sleep for approximately N seconds\n\
313 (default 1.0) between iterations;\n\
314 with inotify and --pid=P, check process P at\n\
315 least once every N seconds\n\
316 -v, --verbose always output headers giving file names\n\
319 -z, --zero-terminated line delimiter is NUL, not newline\n\
321 fputs (HELP_OPTION_DESCRIPTION
, stdout
);
322 fputs (VERSION_OPTION_DESCRIPTION
, stdout
);
325 NUM may have a multiplier suffix:\n\
326 b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,\n\
327 GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y, R, Q.\n\
328 Binary prefixes can be used, too: KiB=K, MiB=M, and so on.\n\
332 With --follow (-f), tail defaults to following the file descriptor, which\n\
333 means that even if a tail'ed file is renamed, tail will continue to track\n\
334 its end. This default behavior is not desirable when you really want to\n\
335 track the actual name of the file, not the file descriptor (e.g., log\n\
336 rotation). Use --follow=name in that case. That causes tail to track the\n\
337 named file in a way that accommodates renaming, removal and creation.\n\
339 emit_ancillary_info (PROGRAM_NAME
);
344 /* Ensure exit, either with SIGPIPE or EXIT_FAILURE status. */
352 /* If the output has gone away, then terminate
353 as we would if we had written to this output. */
355 check_output_alive (void)
357 if (! monitor_output
)
360 if (iopoll (-1, STDOUT_FILENO
, false) == IOPOLL_BROKEN_OUTPUT
)
364 MAYBE_UNUSED
static bool
365 valid_file_spec (struct File_spec
const *f
)
367 /* Exactly one of the following subexpressions must be true. */
368 return ((f
->fd
== -1) ^ (f
->errnum
== 0));
372 pretty_name (struct File_spec
const *f
)
374 return (STREQ (f
->name
, "-") ? _("standard input") : f
->name
);
377 /* Record a file F with descriptor FD, size SIZE, status ST, and
378 blocking status BLOCKING. */
381 record_open_fd (struct File_spec
*f
, int fd
,
382 off_t size
, struct stat
const *st
,
387 f
->mtime
= get_stat_mtime (st
);
390 f
->mode
= st
->st_mode
;
391 f
->blocking
= blocking
;
392 f
->n_unchanged_stats
= 0;
396 /* Close the file with descriptor FD and name FILENAME. */
399 close_fd (int fd
, char const *filename
)
401 if (fd
!= -1 && fd
!= STDIN_FILENO
&& close (fd
))
403 error (0, errno
, _("closing %s (fd=%d)"), quoteaf (filename
), fd
);
408 write_header (char const *pretty_filename
)
410 static bool first_file
= true;
412 printf ("%s==> %s <==\n", (first_file
? "" : "\n"), pretty_filename
);
416 /* Write N_BYTES from BUFFER to stdout.
417 Exit immediately on error with a single diagnostic. */
420 xwrite_stdout (char const *buffer
, size_t n_bytes
)
422 if (n_bytes
> 0 && fwrite (buffer
, 1, n_bytes
, stdout
) < n_bytes
)
424 clearerr (stdout
); /* To avoid redundant close_stdout diagnostic. */
425 error (EXIT_FAILURE
, errno
, _("error writing %s"),
426 quoteaf ("standard output"));
430 /* Read and output N_BYTES of file PRETTY_FILENAME starting at the current
431 position in FD. If N_BYTES is COPY_TO_EOF, then copy until end of file.
432 If N_BYTES is COPY_A_BUFFER, then copy at most one buffer's worth.
433 Return the number of bytes read from the file. */
436 dump_remainder (bool want_header
, char const *pretty_filename
, int fd
,
440 uintmax_t n_remaining
= n_bytes
;
446 idx_t n
= MIN (n_remaining
, BUFSIZ
);
447 ptrdiff_t bytes_read
= safe_read (fd
, buffer
, n
);
451 error (EXIT_FAILURE
, errno
, _("error reading %s"),
452 quoteaf (pretty_filename
));
459 write_header (pretty_filename
);
462 xwrite_stdout (buffer
, bytes_read
);
463 n_written
+= bytes_read
;
464 if (n_bytes
!= COPY_TO_EOF
)
466 n_remaining
-= bytes_read
;
467 if (n_remaining
== 0 || n_bytes
== COPY_A_BUFFER
)
475 /* Call lseek with the specified arguments, where file descriptor FD
476 corresponds to the file, FILENAME.
477 Give a diagnostic and exit nonzero if lseek fails.
478 Otherwise, return the resulting offset. */
481 xlseek (int fd
, off_t offset
, int whence
, char const *filename
)
483 off_t new_offset
= lseek (fd
, offset
, whence
);
491 error (EXIT_FAILURE
, errno
, _("%s: cannot seek to offset %jd"),
492 quotef (filename
), (intmax_t) offset
);
495 error (EXIT_FAILURE
, errno
, _("%s: cannot seek to relative offset %jd"),
496 quotef (filename
), (intmax_t) offset
);
499 error (EXIT_FAILURE
, errno
,
500 _("%s: cannot seek to end-relative offset %jd"),
501 quotef (filename
), (intmax_t) offset
);
508 /* Print the last N_LINES lines from the end of file FD.
509 Go backward through the file, reading 'BUFSIZ' bytes at a time (except
510 probably the first), until we hit the start of the file or have
511 read NUMBER newlines.
512 START_POS is the starting position of the read pointer for the file
513 associated with FD (may be nonzero).
514 END_POS is the file offset of EOF (one larger than offset of last byte).
515 Return true if successful. */
518 file_lines (char const *pretty_filename
, int fd
, struct stat
const *sb
,
519 uintmax_t n_lines
, off_t start_pos
, off_t end_pos
,
523 blksize_t bufsize
= BUFSIZ
;
530 /* Be careful with files with sizes that are a multiple of the page size,
531 as on /proc or /sys file systems these files accept seeking to within
532 the file, but then return no data when read. So use a buffer that's
533 at least PAGE_SIZE to avoid seeking within such files.
535 We could also indirectly use a large enough buffer through io_blksize()
536 however this would be less efficient in the common case, as it would
537 generally pick a larger buffer size, resulting in reading more data
538 from the end of the file. */
539 affirm (S_ISREG (sb
->st_mode
));
540 if (sb
->st_size
% page_size
== 0)
541 bufsize
= MAX (BUFSIZ
, page_size
);
543 buffer
= xmalloc (bufsize
);
545 /* Set 'bytes_read' to the size of the last, probably partial, buffer;
546 0 < 'bytes_read' <= 'bufsize'. */
547 ptrdiff_t bytes_read
= (pos
- start_pos
) % bufsize
;
549 bytes_read
= bufsize
;
550 /* Make 'pos' a multiple of 'bufsize' (0 if the file is short), so that all
551 reads will be on block boundaries, which might increase efficiency. */
553 xlseek (fd
, pos
, SEEK_SET
, pretty_filename
);
554 bytes_read
= safe_read (fd
, buffer
, bytes_read
);
557 error (0, errno
, _("error reading %s"), quoteaf (pretty_filename
));
561 *read_pos
= pos
+ bytes_read
;
563 /* Count the incomplete line on files that don't end with a newline. */
564 if (bytes_read
&& buffer
[bytes_read
- 1] != line_end
)
569 /* Scan backward, counting the newlines in this bufferfull. */
571 idx_t n
= bytes_read
;
575 nl
= memrchr (buffer
, line_end
, n
);
581 /* If this newline isn't the last character in the buffer,
582 output the part that is after it. */
583 xwrite_stdout (nl
+ 1, bytes_read
- (n
+ 1));
584 *read_pos
+= dump_remainder (false, pretty_filename
, fd
,
585 end_pos
- (pos
+ bytes_read
));
590 /* Not enough newlines in that bufferfull. */
591 if (pos
== start_pos
)
593 /* Not enough lines in the file; print everything from
594 start_pos to the end. */
595 xlseek (fd
, start_pos
, SEEK_SET
, pretty_filename
);
596 *read_pos
= start_pos
+ dump_remainder (false, pretty_filename
, fd
,
601 xlseek (fd
, pos
, SEEK_SET
, pretty_filename
);
603 bytes_read
= safe_read (fd
, buffer
, bufsize
);
606 error (0, errno
, _("error reading %s"), quoteaf (pretty_filename
));
611 *read_pos
= pos
+ bytes_read
;
613 while (bytes_read
> 0);
620 /* Print the last N_LINES lines from the end of the standard input,
621 open for reading as pipe FD.
622 Buffer the text as a linked list of LBUFFERs, adding them as needed.
623 Return true if successful. */
626 pipe_lines (char const *pretty_filename
, int fd
, uintmax_t n_lines
,
634 struct linebuffer
*next
;
636 typedef struct linebuffer LBUFFER
;
637 LBUFFER
*first
, *last
, *tmp
;
638 size_t total_lines
= 0; /* Total number of newlines in all buffers. */
640 ptrdiff_t n_read
; /* Size in bytes of most recent read */
642 first
= last
= xmalloc (sizeof (LBUFFER
));
643 first
->nbytes
= first
->nlines
= 0;
644 first
->next
= nullptr;
645 tmp
= xmalloc (sizeof (LBUFFER
));
647 /* Input is always read into a fresh buffer. */
650 n_read
= safe_read (fd
, tmp
->buffer
, BUFSIZ
);
653 tmp
->nbytes
= n_read
;
658 /* Count the number of newlines just read. */
660 char const *buffer_end
= tmp
->buffer
+ n_read
;
661 char const *p
= tmp
->buffer
;
662 while ((p
= memchr (p
, line_end
, buffer_end
- p
)))
668 total_lines
+= tmp
->nlines
;
670 /* If there is enough room in the last buffer read, just append the new
671 one to it. This is because when reading from a pipe, 'n_read' can
672 often be very small. */
673 if (tmp
->nbytes
+ last
->nbytes
< BUFSIZ
)
675 memcpy (&last
->buffer
[last
->nbytes
], tmp
->buffer
, tmp
->nbytes
);
676 last
->nbytes
+= tmp
->nbytes
;
677 last
->nlines
+= tmp
->nlines
;
681 /* If there's not enough room, link the new buffer onto the end of
682 the list, then either free up the oldest buffer for the next
683 read if that would leave enough lines, or else malloc a new one.
684 Some compaction mechanism is possible but probably not
686 last
= last
->next
= tmp
;
687 if (total_lines
- first
->nlines
> n_lines
)
690 total_lines
-= first
->nlines
;
694 tmp
= xmalloc (sizeof (LBUFFER
));
702 error (0, errno
, _("error reading %s"), quoteaf (pretty_filename
));
707 /* If the file is empty, then bail out. */
708 if (last
->nbytes
== 0)
711 /* This prevents a core dump when the pipe contains no newlines. */
715 /* Count the incomplete line on files that don't end with a newline. */
716 if (last
->buffer
[last
->nbytes
- 1] != line_end
)
722 /* Run through the list, printing lines. First, skip over unneeded
724 for (tmp
= first
; total_lines
- tmp
->nlines
> n_lines
; tmp
= tmp
->next
)
725 total_lines
-= tmp
->nlines
;
727 /* Find the correct beginning, then print the rest of the file. */
729 char const *beg
= tmp
->buffer
;
730 char const *buffer_end
= tmp
->buffer
+ tmp
->nbytes
;
731 if (total_lines
> n_lines
)
733 /* Skip 'total_lines' - 'n_lines' newlines. We made sure that
734 'total_lines' - 'n_lines' <= 'tmp->nlines'. */
736 for (j
= total_lines
- n_lines
; j
; --j
)
738 beg
= rawmemchr (beg
, line_end
);
743 xwrite_stdout (beg
, buffer_end
- beg
);
746 for (tmp
= tmp
->next
; tmp
; tmp
= tmp
->next
)
747 xwrite_stdout (tmp
->buffer
, tmp
->nbytes
);
759 /* Print the last N_BYTES characters from the end of FD.
760 Work even if the input is a pipe.
761 This is a stripped down version of pipe_lines.
762 Return true if successful. */
765 pipe_bytes (char const *pretty_filename
, int fd
, uintmax_t n_bytes
,
772 struct charbuffer
*next
;
774 typedef struct charbuffer CBUFFER
;
775 CBUFFER
*first
, *last
, *tmp
;
776 size_t i
; /* Index into buffers. */
777 size_t total_bytes
= 0; /* Total characters in all buffers. */
781 first
= last
= xmalloc (sizeof (CBUFFER
));
783 first
->next
= nullptr;
784 tmp
= xmalloc (sizeof (CBUFFER
));
786 /* Input is always read into a fresh buffer. */
789 n_read
= safe_read (fd
, tmp
->buffer
, BUFSIZ
);
793 tmp
->nbytes
= n_read
;
796 total_bytes
+= tmp
->nbytes
;
797 /* If there is enough room in the last buffer read, just append the new
798 one to it. This is because when reading from a pipe, 'nbytes' can
799 often be very small. */
800 if (tmp
->nbytes
+ last
->nbytes
< BUFSIZ
)
802 memcpy (&last
->buffer
[last
->nbytes
], tmp
->buffer
, tmp
->nbytes
);
803 last
->nbytes
+= tmp
->nbytes
;
807 /* If there's not enough room, link the new buffer onto the end of
808 the list, then either free up the oldest buffer for the next
809 read if that would leave enough characters, or else malloc a new
810 one. Some compaction mechanism is possible but probably not
812 last
= last
->next
= tmp
;
813 if (total_bytes
- first
->nbytes
> n_bytes
)
816 total_bytes
-= first
->nbytes
;
821 tmp
= xmalloc (sizeof (CBUFFER
));
830 error (0, errno
, _("error reading %s"), quoteaf (pretty_filename
));
835 /* Run through the list, printing characters. First, skip over unneeded
837 for (tmp
= first
; total_bytes
- tmp
->nbytes
> n_bytes
; tmp
= tmp
->next
)
838 total_bytes
-= tmp
->nbytes
;
840 /* Find the correct beginning, then print the rest of the file.
841 We made sure that 'total_bytes' - 'n_bytes' <= 'tmp->nbytes'. */
842 if (total_bytes
> n_bytes
)
843 i
= total_bytes
- n_bytes
;
846 xwrite_stdout (&tmp
->buffer
[i
], tmp
->nbytes
- i
);
848 for (tmp
= tmp
->next
; tmp
; tmp
= tmp
->next
)
849 xwrite_stdout (tmp
->buffer
, tmp
->nbytes
);
861 /* Skip N_BYTES characters from the start of pipe FD, and print
862 any extra characters that were read beyond that.
863 Return 1 on error, 0 if ok, -1 if EOF. */
866 start_bytes (char const *pretty_filename
, int fd
, uintmax_t n_bytes
,
873 ptrdiff_t bytes_read
= safe_read (fd
, buffer
, BUFSIZ
);
878 error (0, errno
, _("error reading %s"), quoteaf (pretty_filename
));
881 *read_pos
+= bytes_read
;
882 if (bytes_read
<= n_bytes
)
883 n_bytes
-= bytes_read
;
886 size_t n_remaining
= bytes_read
- n_bytes
;
887 /* Print extra characters if there are any. */
888 xwrite_stdout (&buffer
[n_bytes
], n_remaining
);
896 /* Skip N_LINES lines at the start of file or pipe FD, and print
897 any extra characters that were read beyond that.
898 Return 1 on error, 0 if ok, -1 if EOF. */
901 start_lines (char const *pretty_filename
, int fd
, uintmax_t n_lines
,
910 ptrdiff_t bytes_read
= safe_read (fd
, buffer
, BUFSIZ
);
911 if (bytes_read
== 0) /* EOF */
913 if (bytes_read
< 0) /* error */
915 error (0, errno
, _("error reading %s"), quoteaf (pretty_filename
));
919 char *buffer_end
= buffer
+ bytes_read
;
921 *read_pos
+= bytes_read
;
924 while ((p
= memchr (p
, line_end
, buffer_end
- p
)))
930 xwrite_stdout (p
, buffer_end
- p
);
937 /* Return false when FD is open on a file residing on a local file system.
938 If fstatfs fails, give a diagnostic and return true.
939 If fstatfs cannot be called, return true. */
941 fremote (int fd
, char const *name
)
943 bool remote
= true; /* be conservative (poll by default). */
945 #if HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE \
946 && (defined __linux__ || defined __ANDROID__)
948 int err
= fstatfs (fd
, &buf
);
951 /* On at least linux-2.6.38, fstatfs fails with ENOSYS when FD
952 is open on a pipe. Treat that like a remote file. */
954 error (0, errno
, _("cannot determine location of %s. "
955 "reverting to polling"), quoteaf (name
));
959 /* Treat unrecognized file systems as "remote", so caller polls.
960 Note README-release has instructions for syncing the internal
961 list with the latest Linux kernel file system constants. */
962 remote
= is_local_fs_type (buf
.f_type
) <= 0;
969 /* open/fstat F->name and handle changes. */
971 recheck (struct File_spec
*f
, bool blocking
)
973 struct stat new_stats
;
975 bool is_stdin
= (STREQ (f
->name
, "-"));
976 bool was_tailable
= f
->tailable
;
977 int prev_errnum
= f
->errnum
;
981 : open (f
->name
, O_RDONLY
| (blocking
? 0 : O_NONBLOCK
)));
983 affirm (valid_file_spec (f
));
985 /* If the open fails because the file doesn't exist,
986 then mark the file as not tailable. */
987 f
->tailable
= !(reopen_inaccessible_files
&& fd
== -1);
989 if (! disable_inotify
&& ! lstat (f
->name
, &new_stats
)
990 && S_ISLNK (new_stats
.st_mode
))
992 /* Diagnose the edge case where a regular file is changed
993 to a symlink. We avoid inotify with symlinks since
994 it's awkward to match between symlink name and target. */
999 error (0, 0, _("%s has been replaced with an untailable symbolic link"),
1000 quoteaf (pretty_name (f
)));
1002 else if (fd
== -1 || fstat (fd
, &new_stats
) < 0)
1010 /* FIXME-maybe: detect the case in which the file first becomes
1011 unreadable (perms), and later becomes readable again and can
1012 be seen to be the same file (dev/ino). Otherwise, tail prints
1013 the entire contents of the file when it becomes readable. */
1014 error (0, f
->errnum
, _("%s has become inaccessible"),
1015 quoteaf (pretty_name (f
)));
1019 /* say nothing... it's still not tailable */
1022 else if (prev_errnum
!= errno
)
1023 error (0, errno
, "%s", quotef (pretty_name (f
)));
1025 else if (!IS_TAILABLE_FILE_TYPE (new_stats
.st_mode
))
1029 f
->tailable
= false;
1030 f
->ignore
= ! (reopen_inaccessible_files
&& follow_mode
== Follow_name
);
1031 if (was_tailable
|| prev_errnum
!= f
->errnum
)
1032 error (0, 0, _("%s has been replaced with an untailable file%s"),
1033 quoteaf (pretty_name (f
)),
1034 f
->ignore
? _("; giving up on this name") : "");
1036 else if ((f
->remote
= fremote (fd
, pretty_name (f
))) && ! disable_inotify
)
1040 error (0, 0, _("%s has been replaced with an untailable remote file"),
1041 quoteaf (pretty_name (f
)));
1053 close_fd (fd
, pretty_name (f
));
1054 close_fd (f
->fd
, pretty_name (f
));
1057 else if (prev_errnum
&& prev_errnum
!= ENOENT
)
1060 affirm (f
->fd
== -1);
1061 error (0, 0, _("%s has become accessible"), quoteaf (pretty_name (f
)));
1063 else if (f
->fd
== -1)
1065 /* A new file even when inodes haven't changed as <dev,inode>
1066 pairs can be reused, and we know the file was missing
1067 on the previous iteration. Note this also means the file
1068 is redisplayed in --follow=name mode if renamed away from
1069 and back to a monitored name. */
1073 _("%s has appeared; following new file"),
1074 quoteaf (pretty_name (f
)));
1076 else if (f
->ino
!= new_stats
.st_ino
|| f
->dev
!= new_stats
.st_dev
)
1078 /* File has been replaced (e.g., via log rotation) --
1079 tail the new one. */
1083 _("%s has been replaced; following new file"),
1084 quoteaf (pretty_name (f
)));
1086 /* Close the old one. */
1087 close_fd (f
->fd
, pretty_name (f
));
1092 /* No changes detected, so close new fd. */
1093 close_fd (fd
, pretty_name (f
));
1096 /* FIXME: When a log is rotated, daemons tend to log to the
1097 old file descriptor until the new file is present and
1098 the daemon is sent a signal. Therefore tail may miss entries
1099 being written to the old file. Perhaps we should keep
1100 the older file open and continue to monitor it until
1101 data is written to a new file. */
1104 /* Start at the beginning of the file. */
1105 record_open_fd (f
, fd
, 0, &new_stats
, (is_stdin
? -1 : blocking
));
1106 if (S_ISREG (new_stats
.st_mode
))
1107 xlseek (fd
, 0, SEEK_SET
, pretty_name (f
));
1111 /* Return true if any of the N_FILES files in F are live, i.e., have
1112 open file descriptors, or should be checked again (see --retry).
1113 When following descriptors, checking should only continue when any
1114 of the files is not yet ignored. */
1117 any_live_files (const struct File_spec
*f
, size_t n_files
)
1119 /* In inotify mode, ignore may be set for files
1120 which may later be replaced with new files.
1121 So always consider files live in -F mode. */
1122 if (reopen_inaccessible_files
&& follow_mode
== Follow_name
)
1125 for (size_t i
= 0; i
< n_files
; i
++)
1131 if (! f
[i
].ignore
&& reopen_inaccessible_files
)
1139 /* Determine whether all watched writers are dead.
1140 Returns true only if all processes' states can be determined,
1141 and all processes no longer exist. */
1144 writers_are_dead (void)
1149 for (int i
= 0; i
< nbpids
; i
++)
1151 if (kill (pids
[i
], 0) == 0 || errno
== EPERM
)
1158 /* Tail N_FILES files forever, or until killed.
1159 The pertinent information for each file is stored in an entry of F.
1160 Loop over each of them, doing an fstat to see if they have changed size,
1161 and an occasional open/fstat to see if any dev/ino pair has changed.
1162 If none of them have changed size in one iteration, sleep for a
1163 while and try again. Continue until the user interrupts us. */
1166 tail_forever (struct File_spec
*f
, size_t n_files
, double sleep_interval
)
1168 /* Use blocking I/O as an optimization, when it's easy. */
1169 bool blocking
= (!nbpids
&& follow_mode
== Follow_descriptor
1170 && n_files
== 1 && f
[0].fd
!= -1 && ! S_ISREG (f
[0].mode
));
1172 bool writers_dead
= false;
1179 bool any_input
= false;
1181 for (i
= 0; i
< n_files
; i
++)
1187 uintmax_t bytes_read
;
1194 recheck (&f
[i
], blocking
);
1199 name
= pretty_name (&f
[i
]);
1202 if (f
[i
].blocking
!= blocking
)
1204 int old_flags
= fcntl (fd
, F_GETFL
);
1205 int new_flags
= old_flags
| (blocking
? 0 : O_NONBLOCK
);
1207 || (new_flags
!= old_flags
1208 && fcntl (fd
, F_SETFL
, new_flags
) == -1))
1210 /* Don't update f[i].blocking if fcntl fails. */
1211 if (S_ISREG (f
[i
].mode
) && errno
== EPERM
)
1213 /* This happens when using tail -f on a file with
1214 the append-only attribute. */
1217 error (EXIT_FAILURE
, errno
,
1218 _("%s: cannot change nonblocking mode"),
1222 f
[i
].blocking
= blocking
;
1225 bool read_unchanged
= false;
1228 if (fstat (fd
, &stats
) != 0)
1231 f
[i
].errnum
= errno
;
1232 error (0, errno
, "%s", quotef (name
));
1233 close (fd
); /* ignore failure */
1237 if (f
[i
].mode
== stats
.st_mode
1238 && (! S_ISREG (stats
.st_mode
) || f
[i
].size
== stats
.st_size
)
1239 && timespec_cmp (f
[i
].mtime
, get_stat_mtime (&stats
)) == 0)
1241 if ((max_n_unchanged_stats_between_opens
1242 <= f
[i
].n_unchanged_stats
++)
1243 && follow_mode
== Follow_name
)
1245 recheck (&f
[i
], f
[i
].blocking
);
1246 f
[i
].n_unchanged_stats
= 0;
1248 if (fd
!= f
[i
].fd
|| S_ISREG (stats
.st_mode
) || 1 < n_files
)
1251 read_unchanged
= true;
1254 affirm (fd
== f
[i
].fd
);
1256 /* This file has changed. Print out what we can, and
1257 then keep looping. */
1259 f
[i
].mtime
= get_stat_mtime (&stats
);
1260 f
[i
].mode
= stats
.st_mode
;
1263 if (! read_unchanged
)
1264 f
[i
].n_unchanged_stats
= 0;
1266 /* XXX: This is only a heuristic, as the file may have also
1267 been truncated and written to if st_size >= size
1268 (in which case we ignore new data <= size). */
1269 if (S_ISREG (mode
) && stats
.st_size
< f
[i
].size
)
1271 error (0, 0, _("%s: file truncated"), quotef (name
));
1272 /* Assume the file was truncated to 0,
1273 and therefore output all "new" data. */
1274 xlseek (fd
, 0, SEEK_SET
, name
);
1281 write_header (name
);
1286 /* Don't read more than st_size on networked file systems
1287 because it was seen on glusterfs at least, that st_size
1288 may be smaller than the data read on a _subsequent_ stat call. */
1289 uintmax_t bytes_to_read
;
1291 bytes_to_read
= COPY_A_BUFFER
;
1292 else if (S_ISREG (mode
) && f
[i
].remote
)
1293 bytes_to_read
= stats
.st_size
- f
[i
].size
;
1295 bytes_to_read
= COPY_TO_EOF
;
1297 bytes_read
= dump_remainder (false, name
, fd
, bytes_to_read
);
1299 if (read_unchanged
&& bytes_read
)
1300 f
[i
].n_unchanged_stats
= 0;
1302 any_input
|= (bytes_read
!= 0);
1303 f
[i
].size
+= bytes_read
;
1306 if (! any_live_files (f
, n_files
))
1308 error (0, 0, _("no files remaining"));
1312 if ((!any_input
|| blocking
) && fflush (stdout
) != 0)
1315 check_output_alive ();
1317 /* If nothing was read, sleep and/or check for dead writers. */
1323 /* Once the writer is dead, read the files once more to
1324 avoid a race condition. */
1325 writers_dead
= writers_are_dead ();
1327 if (!writers_dead
&& xnanosleep (sleep_interval
))
1328 error (EXIT_FAILURE
, errno
, _("cannot read realtime clock"));
1336 /* Return true if any of the N_FILES files in F is remote, i.e., has
1337 an open file descriptor and is on a network file system. */
1340 any_remote_file (const struct File_spec
*f
, size_t n_files
)
1342 for (size_t i
= 0; i
< n_files
; i
++)
1343 if (0 <= f
[i
].fd
&& f
[i
].remote
)
1348 /* Return true if any of the N_FILES files in F is non remote, i.e., has
1349 an open file descriptor and is not on a network file system. */
1352 any_non_remote_file (const struct File_spec
*f
, size_t n_files
)
1354 for (size_t i
= 0; i
< n_files
; i
++)
1355 if (0 <= f
[i
].fd
&& ! f
[i
].remote
)
1360 /* Return true if any of the N_FILES files in F is a symlink.
1361 Note we don't worry about the edge case where "-" exists,
1362 since that will have the same consequences for inotify,
1363 which is the only context this function is currently used. */
1366 any_symlinks (const struct File_spec
*f
, size_t n_files
)
1369 for (size_t i
= 0; i
< n_files
; i
++)
1370 if (lstat (f
[i
].name
, &st
) == 0 && S_ISLNK (st
.st_mode
))
1375 /* Return true if any of the N_FILES files in F is not
1376 a regular file or fifo. This is used to avoid adding inotify
1377 watches on a device file for example, which inotify
1378 will accept, but not give any events for. */
1381 any_non_regular_fifo (const struct File_spec
*f
, size_t n_files
)
1383 for (size_t i
= 0; i
< n_files
; i
++)
1384 if (0 <= f
[i
].fd
&& ! S_ISREG (f
[i
].mode
) && ! S_ISFIFO (f
[i
].mode
))
1389 /* Return true if any of the N_FILES files in F represents
1390 stdin and is tailable. */
1393 tailable_stdin (const struct File_spec
*f
, size_t n_files
)
1395 for (size_t i
= 0; i
< n_files
; i
++)
1396 if (!f
[i
].ignore
&& STREQ (f
[i
].name
, "-"))
1402 wd_hasher (const void *entry
, size_t tabsize
)
1404 const struct File_spec
*spec
= entry
;
1405 return spec
->wd
% tabsize
;
1409 wd_comparator (const void *e1
, const void *e2
)
1411 const struct File_spec
*spec1
= e1
;
1412 const struct File_spec
*spec2
= e2
;
1413 return spec1
->wd
== spec2
->wd
;
1416 /* Output (new) data for FSPEC->fd.
1417 PREV_FSPEC records the last File_spec for which we output. */
1419 check_fspec (struct File_spec
*fspec
, struct File_spec
**prev_fspec
)
1424 if (fspec
->fd
== -1)
1427 name
= pretty_name (fspec
);
1429 if (fstat (fspec
->fd
, &stats
) != 0)
1431 fspec
->errnum
= errno
;
1432 close_fd (fspec
->fd
, name
);
1437 /* XXX: This is only a heuristic, as the file may have also
1438 been truncated and written to if st_size >= size
1439 (in which case we ignore new data <= size).
1440 Though in the inotify case it's more likely we'll get
1441 separate events for truncate() and write(). */
1442 if (S_ISREG (fspec
->mode
) && stats
.st_size
< fspec
->size
)
1444 error (0, 0, _("%s: file truncated"), quotef (name
));
1445 xlseek (fspec
->fd
, 0, SEEK_SET
, name
);
1448 else if (S_ISREG (fspec
->mode
) && stats
.st_size
== fspec
->size
1449 && timespec_cmp (fspec
->mtime
, get_stat_mtime (&stats
)) == 0)
1452 bool want_header
= print_headers
&& (fspec
!= *prev_fspec
);
1454 uintmax_t bytes_read
= dump_remainder (want_header
, name
, fspec
->fd
,
1456 fspec
->size
+= bytes_read
;
1460 *prev_fspec
= fspec
;
1461 if (fflush (stdout
) != 0)
1466 /* Attempt to tail N_FILES files forever, or until killed.
1467 Check modifications using the inotify events system.
1468 Exit if finished or on fatal error; return to revert to polling. */
1470 tail_forever_inotify (int wd
, struct File_spec
*f
, size_t n_files
,
1471 double sleep_interval
, Hash_table
**wd_to_namep
)
1473 # if TAIL_TEST_SLEEP
1474 /* Delay between open() and inotify_add_watch()
1475 to help trigger different cases. */
1476 xnanosleep (1000000);
1478 unsigned int max_realloc
= 3;
1480 /* Map an inotify watch descriptor to the name of the file it's watching. */
1481 Hash_table
*wd_to_name
;
1483 bool found_watchable_file
= false;
1484 bool tailed_but_unwatchable
= false;
1485 bool found_unwatchable_dir
= false;
1486 bool no_inotify_resources
= false;
1487 bool writers_dead
= false;
1488 struct File_spec
*prev_fspec
;
1491 size_t evbuf_off
= 0;
1493 wd_to_name
= hash_initialize (n_files
, nullptr, wd_hasher
, wd_comparator
,
1497 *wd_to_namep
= wd_to_name
;
1499 /* The events mask used with inotify on files (not directories). */
1500 uint32_t inotify_wd_mask
= IN_MODIFY
;
1501 /* TODO: Perhaps monitor these events in Follow_descriptor mode also,
1502 to tag reported file names with "deleted", "moved" etc. */
1503 if (follow_mode
== Follow_name
)
1504 inotify_wd_mask
|= (IN_ATTRIB
| IN_DELETE_SELF
| IN_MOVE_SELF
);
1506 /* Add an inotify watch for each watched file. If -F is specified then watch
1507 its parent directory too, in this way when they re-appear we can add them
1508 again to the watch list. */
1510 for (i
= 0; i
< n_files
; i
++)
1514 size_t fnlen
= strlen (f
[i
].name
);
1520 if (follow_mode
== Follow_name
)
1522 size_t dirlen
= dir_len (f
[i
].name
);
1523 char prev
= f
[i
].name
[dirlen
];
1524 f
[i
].basename_start
= last_component (f
[i
].name
) - f
[i
].name
;
1526 f
[i
].name
[dirlen
] = '\0';
1528 /* It's fine to add the same directory more than once.
1529 In that case the same watch descriptor is returned. */
1530 f
[i
].parent_wd
= inotify_add_watch (wd
, dirlen
? f
[i
].name
: ".",
1531 (IN_CREATE
| IN_DELETE
1532 | IN_MOVED_TO
| IN_ATTRIB
1535 f
[i
].name
[dirlen
] = prev
;
1537 if (f
[i
].parent_wd
< 0)
1539 if (errno
!= ENOSPC
) /* suppress confusing error. */
1540 error (0, errno
, _("cannot watch parent directory of %s"),
1541 quoteaf (f
[i
].name
));
1543 error (0, 0, _("inotify resources exhausted"));
1544 found_unwatchable_dir
= true;
1545 /* We revert to polling below. Note invalid uses
1546 of the inotify API will still be diagnosed. */
1551 f
[i
].wd
= inotify_add_watch (wd
, f
[i
].name
, inotify_wd_mask
);
1555 if (f
[i
].fd
!= -1) /* already tailed. */
1556 tailed_but_unwatchable
= true;
1557 if (errno
== ENOSPC
|| errno
== ENOMEM
)
1559 no_inotify_resources
= true;
1560 error (0, 0, _("inotify resources exhausted"));
1563 else if (errno
!= f
[i
].errnum
)
1564 error (0, errno
, _("cannot watch %s"), quoteaf (f
[i
].name
));
1568 if (hash_insert (wd_to_name
, &(f
[i
])) == nullptr)
1571 found_watchable_file
= true;
1575 /* Linux kernel 2.6.24 at least has a bug where eventually, ENOSPC is always
1576 returned by inotify_add_watch. In any case we should revert to polling
1577 when there are no inotify resources. Also a specified directory may not
1578 be currently present or accessible, so revert to polling. Also an already
1579 tailed but unwatchable due rename/unlink race, should also revert. */
1580 if (no_inotify_resources
|| found_unwatchable_dir
1581 || (follow_mode
== Follow_descriptor
&& tailed_but_unwatchable
))
1583 if (follow_mode
== Follow_descriptor
&& !found_watchable_file
)
1584 exit (EXIT_FAILURE
);
1586 prev_fspec
= &(f
[n_files
- 1]);
1588 /* Check files again. New files or data can be available since last time we
1589 checked and before they are watched by inotify. */
1590 for (i
= 0; i
< n_files
; i
++)
1594 /* check for new files. */
1595 if (follow_mode
== Follow_name
)
1596 recheck (&(f
[i
]), false);
1597 else if (f
[i
].fd
!= -1)
1599 /* If the file was replaced in the small window since we tailed,
1600 then assume the watch is on the wrong item (different to
1601 that we've already produced output for), and so revert to
1602 polling the original descriptor. */
1605 if (stat (f
[i
].name
, &stats
) == 0
1606 && (f
[i
].dev
!= stats
.st_dev
|| f
[i
].ino
!= stats
.st_ino
))
1608 error (0, errno
, _("%s was replaced"),
1609 quoteaf (pretty_name (&(f
[i
]))));
1614 /* check for new data. */
1615 check_fspec (&f
[i
], &prev_fspec
);
1619 evlen
+= sizeof (struct inotify_event
) + 1;
1620 evbuf
= xmalloc (evlen
);
1622 /* Wait for inotify events and handle them. Events on directories
1623 ensure that watched files can be re-added when following by name.
1624 This loop blocks on the 'safe_read' call until a new event is notified.
1625 But when --pid=P is specified, tail usually waits via poll. */
1629 struct File_spec
*fspec
;
1630 struct inotify_event
*ev
;
1633 /* When following by name without --retry, and the last file has
1634 been unlinked or renamed-away, diagnose it and return. */
1635 if (follow_mode
== Follow_name
1636 && ! reopen_inaccessible_files
1637 && hash_get_n_entries (wd_to_name
) == 0)
1638 error (EXIT_FAILURE
, 0, _("no files remaining"));
1640 if (len
<= evbuf_off
)
1642 /* Poll for inotify events. When watching a PID, ensure
1643 that a read from WD will not block indefinitely.
1644 If MONITOR_OUTPUT, also poll for a broken output pipe. */
1647 struct pollfd pfd
[2];
1650 /* How many ms to wait for changes. -1 means wait forever. */
1656 exit (EXIT_SUCCESS
);
1658 writers_dead
= writers_are_dead ();
1660 if (writers_dead
|| sleep_interval
<= 0)
1662 else if (sleep_interval
< INT_MAX
/ 1000 - 1)
1664 /* delay = ceil (sleep_interval * 1000), sans libm. */
1665 double ddelay
= sleep_interval
* 1000;
1667 delay
+= delay
< ddelay
;
1672 pfd
[0].events
= POLLIN
;
1673 pfd
[1].fd
= STDOUT_FILENO
;
1674 pfd
[1].events
= pfd
[1].revents
= 0;
1675 file_change
= poll (pfd
, monitor_output
+ 1, delay
);
1677 while (file_change
== 0);
1679 if (file_change
< 0)
1680 error (EXIT_FAILURE
, errno
,
1681 _("error waiting for inotify and output events"));
1685 len
= safe_read (wd
, evbuf
, evlen
);
1688 /* For kernels prior to 2.6.21, read returns 0 when the buffer
1690 if ((len
== 0 || (len
< 0 && errno
== EINVAL
))
1695 evbuf
= xrealloc (evbuf
, evlen
);
1700 error (EXIT_FAILURE
, errno
, _("error reading inotify event"));
1703 void_ev
= evbuf
+ evbuf_off
;
1705 evbuf_off
+= sizeof (*ev
) + ev
->len
;
1707 /* If a directory is deleted, IN_DELETE_SELF is emitted
1708 with ev->name of length 0.
1709 We need to catch it, otherwise it would wait forever,
1710 as wd for directory becomes inactive. Revert to polling now. */
1711 if ((ev
->mask
& IN_DELETE_SELF
) && ! ev
->len
)
1713 for (i
= 0; i
< n_files
; i
++)
1715 if (ev
->wd
== f
[i
].parent_wd
)
1718 _("directory containing watched file was removed"));
1724 if (ev
->len
) /* event on ev->name in watched directory. */
1727 for (j
= 0; j
< n_files
; j
++)
1729 /* With N=hundreds of frequently-changing files, this O(N^2)
1730 process might be a problem. FIXME: use a hash table? */
1731 if (f
[j
].parent_wd
== ev
->wd
1732 && STREQ (ev
->name
, f
[j
].name
+ f
[j
].basename_start
))
1736 /* It is not a watched file. */
1743 bool deleting
= !! (ev
->mask
& IN_DELETE
);
1747 /* Adding the same inode again will look up any existing wd. */
1748 new_wd
= inotify_add_watch (wd
, f
[j
].name
, inotify_wd_mask
);
1751 if (! deleting
&& new_wd
< 0)
1753 if (errno
== ENOSPC
|| errno
== ENOMEM
)
1755 error (0, 0, _("inotify resources exhausted"));
1756 return; /* revert to polling. */
1760 /* Can get ENOENT for a dangling symlink for example. */
1761 error (0, errno
, _("cannot watch %s"), quoteaf (f
[j
].name
));
1763 /* We'll continue below after removing the existing watch. */
1766 /* This will be false if only attributes of file change. */
1768 new_watch
= (! deleting
) && (fspec
->wd
< 0 || new_wd
!= fspec
->wd
);
1774 inotify_rm_watch (wd
, fspec
->wd
);
1775 hash_remove (wd_to_name
, fspec
);
1783 /* If the file was moved then inotify will use the source file wd
1784 for the destination file. Make sure the key is not present in
1786 struct File_spec
*prev
= hash_remove (wd_to_name
, fspec
);
1787 if (prev
&& prev
!= fspec
)
1789 if (follow_mode
== Follow_name
)
1790 recheck (prev
, false);
1792 close_fd (prev
->fd
, pretty_name (prev
));
1795 if (hash_insert (wd_to_name
, fspec
) == nullptr)
1799 if (follow_mode
== Follow_name
)
1800 recheck (fspec
, false);
1804 struct File_spec key
;
1806 fspec
= hash_lookup (wd_to_name
, &key
);
1812 if (ev
->mask
& (IN_ATTRIB
| IN_DELETE
| IN_DELETE_SELF
| IN_MOVE_SELF
))
1814 /* Note for IN_MOVE_SELF (the file we're watching has
1815 been clobbered via a rename) we leave the watch
1816 in place since it may still be part of the set
1817 of watched names. */
1818 if (ev
->mask
& IN_DELETE_SELF
)
1820 inotify_rm_watch (wd
, fspec
->wd
);
1821 hash_remove (wd_to_name
, fspec
);
1824 /* Note we get IN_ATTRIB for unlink() as st_nlink decrements.
1825 The usual path is a close() done in recheck() triggers
1826 an IN_DELETE_SELF event as the inode is removed.
1827 However sometimes open() will succeed as even though
1828 st_nlink is decremented, the dentry (cache) is not updated.
1829 Thus we depend on the IN_DELETE event on the directory
1830 to trigger processing for the removed file. */
1832 recheck (fspec
, false);
1836 check_fspec (fspec
, &prev_fspec
);
1841 /* Output the last N_BYTES bytes of file FILENAME open for reading in FD.
1842 Return true if successful. */
1845 tail_bytes (char const *pretty_filename
, int fd
, uintmax_t n_bytes
,
1846 uintmax_t *read_pos
)
1850 if (fstat (fd
, &stats
))
1852 error (0, errno
, _("cannot fstat %s"), quoteaf (pretty_filename
));
1858 if (! presume_input_pipe
&& n_bytes
<= OFF_T_MAX
1859 && ((S_ISREG (stats
.st_mode
)
1860 && xlseek (fd
, n_bytes
, SEEK_CUR
, pretty_filename
) >= 0)
1861 || lseek (fd
, n_bytes
, SEEK_CUR
) != -1))
1862 *read_pos
+= n_bytes
;
1865 int t
= start_bytes (pretty_filename
, fd
, n_bytes
, read_pos
);
1869 n_bytes
= COPY_TO_EOF
;
1874 off_t current_pos
= -1;
1875 bool copy_from_current_pos
= false;
1877 if (! presume_input_pipe
&& n_bytes
<= OFF_T_MAX
)
1879 if (usable_st_size (&stats
))
1881 /* Use st_size only if it's so large that this is
1882 probably not a /proc or similar file, where st_size
1884 end_pos
= stats
.st_size
;
1885 off_t smallish_size
= STP_BLKSIZE (&stats
);
1886 copy_from_current_pos
= smallish_size
< end_pos
;
1890 current_pos
= lseek (fd
, -n_bytes
, SEEK_END
);
1891 copy_from_current_pos
= current_pos
!= -1;
1892 if (copy_from_current_pos
)
1893 end_pos
= current_pos
+ n_bytes
;
1896 if (! copy_from_current_pos
)
1897 return pipe_bytes (pretty_filename
, fd
, n_bytes
, read_pos
);
1898 if (current_pos
== -1)
1899 current_pos
= xlseek (fd
, 0, SEEK_CUR
, pretty_filename
);
1900 if (current_pos
< end_pos
)
1902 off_t bytes_remaining
= end_pos
- current_pos
;
1904 if (n_bytes
< bytes_remaining
)
1906 current_pos
= end_pos
- n_bytes
;
1907 xlseek (fd
, current_pos
, SEEK_SET
, pretty_filename
);
1910 *read_pos
= current_pos
;
1913 *read_pos
+= dump_remainder (false, pretty_filename
, fd
, n_bytes
);
1917 /* Output the last N_LINES lines of file FILENAME open for reading in FD.
1918 Return true if successful. */
1921 tail_lines (char const *pretty_filename
, int fd
, uintmax_t n_lines
,
1922 uintmax_t *read_pos
)
1926 if (fstat (fd
, &stats
))
1928 error (0, errno
, _("cannot fstat %s"), quoteaf (pretty_filename
));
1934 /* If skipping all input use lseek if possible, for speed. */
1936 if (n_lines
== UINTMAX_MAX
&& 0 <= (pos
= lseek (fd
, SEEK_END
, 0)))
1940 int t
= start_lines (pretty_filename
, fd
, n_lines
, read_pos
);
1943 *read_pos
+= dump_remainder (false, pretty_filename
, fd
, COPY_TO_EOF
);
1948 off_t start_pos
= -1;
1951 /* Use file_lines only if FD refers to a regular file for
1952 which lseek (... SEEK_END) works. */
1953 if ( ! presume_input_pipe
1954 && S_ISREG (stats
.st_mode
)
1955 && (start_pos
= lseek (fd
, 0, SEEK_CUR
)) != -1
1956 && start_pos
< (end_pos
= lseek (fd
, 0, SEEK_END
)))
1958 *read_pos
= end_pos
;
1960 && ! file_lines (pretty_filename
, fd
, &stats
, n_lines
,
1961 start_pos
, end_pos
, read_pos
))
1966 /* Under very unlikely circumstances, it is possible to reach
1967 this point after positioning the file pointer to end of file
1968 via the 'lseek (...SEEK_END)' above. In that case, reposition
1969 the file pointer back to start_pos before calling pipe_lines. */
1970 if (start_pos
!= -1)
1971 xlseek (fd
, start_pos
, SEEK_SET
, pretty_filename
);
1973 return pipe_lines (pretty_filename
, fd
, n_lines
, read_pos
);
1979 /* Display the last N_UNITS units of file FILENAME, open for reading
1980 via FD. Set *READ_POS to the position of the input stream pointer.
1981 *READ_POS is usually the number of bytes read and corresponds to an
1982 offset from the beginning of a file. However, it may be larger than
1983 OFF_T_MAX (as for an input pipe), and may also be larger than the
1984 number of bytes read (when an input pointer is initially not at
1985 beginning of file), and may be far greater than the number of bytes
1986 actually read for an input file that is seekable.
1987 Return true if successful. */
1990 tail (char const *filename
, int fd
, uintmax_t n_units
,
1991 uintmax_t *read_pos
)
1995 return tail_lines (filename
, fd
, n_units
, read_pos
);
1997 return tail_bytes (filename
, fd
, n_units
, read_pos
);
2000 /* Display the last N_UNITS units of the file described by F.
2001 Return true if successful. */
2004 tail_file (struct File_spec
*f
, uintmax_t n_units
)
2009 bool is_stdin
= (STREQ (f
->name
, "-"));
2013 have_read_stdin
= true;
2015 xset_binary_mode (STDIN_FILENO
, O_BINARY
);
2018 fd
= open (f
->name
, O_RDONLY
| O_BINARY
);
2020 f
->tailable
= !(reopen_inaccessible_files
&& fd
== -1);
2028 f
->ignore
= ! reopen_inaccessible_files
;
2032 error (0, errno
, _("cannot open %s for reading"),
2033 quoteaf (pretty_name (f
)));
2041 write_header (pretty_name (f
));
2042 ok
= tail (pretty_name (f
), fd
, n_units
, &read_pos
);
2048 /* Before the tail function provided 'read_pos', there was
2049 a race condition described in the URL below. This sleep
2050 call made the window big enough to exercise the problem. */
2054 if (fstat (fd
, &stats
) < 0)
2058 error (0, errno
, _("error reading %s"),
2059 quoteaf (pretty_name (f
)));
2061 else if (!IS_TAILABLE_FILE_TYPE (stats
.st_mode
))
2065 f
->tailable
= false;
2066 f
->ignore
= ! reopen_inaccessible_files
;
2067 error (0, 0, _("%s: cannot follow end of this type of file%s"),
2068 quotef (pretty_name (f
)),
2069 f
->ignore
? _("; giving up on this name") : "");
2074 f
->ignore
= ! reopen_inaccessible_files
;
2075 close_fd (fd
, pretty_name (f
));
2080 /* Note: we must use read_pos here, not stats.st_size,
2081 to avoid a race condition described by Ken Raeburn:
2082 https://lists.gnu.org/r/bug-textutils/2003-05/msg00007.html */
2083 record_open_fd (f
, fd
, read_pos
, &stats
, (is_stdin
? -1 : 1));
2084 f
->remote
= fremote (fd
, pretty_name (f
));
2089 if (!is_stdin
&& close (fd
))
2091 error (0, errno
, _("error reading %s"),
2092 quoteaf (pretty_name (f
)));
2101 /* If obsolete usage is allowed, and the command line arguments are of
2102 the obsolete form and the option string is well-formed, set
2103 *N_UNITS, the globals COUNT_LINES, FOREVER, and FROM_START, and
2104 return true. If the command line arguments are obviously incorrect
2105 (e.g., because obsolete usage is not allowed and the arguments are
2106 incorrect for non-obsolete usage), report an error and exit.
2107 Otherwise, return false and don't modify any parameter or global
2111 parse_obsolete_option (int argc
, char * const *argv
, uintmax_t *n_units
)
2114 char const *n_string
;
2115 char const *n_string_end
;
2116 int default_count
= DEFAULT_N_LINES
;
2118 bool t_count_lines
= true;
2119 bool t_forever
= false;
2121 /* With the obsolete form, there is one option string and at most
2122 one file argument. Watch out for "-" and "--", though. */
2124 || (argc
== 3 && ! (argv
[2][0] == '-' && argv
[2][1]))
2125 || (3 <= argc
&& argc
<= 4 && STREQ (argv
[2], "--"))))
2128 int posix_ver
= posix2_version ();
2129 bool obsolete_usage
= posix_ver
< 200112;
2130 bool traditional_usage
= obsolete_usage
|| 200809 <= posix_ver
;
2139 /* Leading "+" is a file name in the standard form. */
2140 if (!traditional_usage
)
2143 t_from_start
= true;
2147 /* In the non-obsolete form, "-" is standard input and "-c"
2148 requires an option-argument. The obsolete multidigit options
2149 are supported as a GNU extension even when conforming to
2150 POSIX 1003.1-2001 or later, so don't complain about them. */
2151 if (!obsolete_usage
&& !p
[p
[0] == 'c'])
2154 t_from_start
= false;
2159 while (ISDIGIT (*p
))
2165 case 'b': default_count
*= 512; FALLTHROUGH
;
2166 case 'c': t_count_lines
= false; FALLTHROUGH
;
2167 case 'l': p
++; break;
2179 if (n_string
== n_string_end
)
2180 *n_units
= default_count
;
2181 else if ((xstrtoumax (n_string
, nullptr, 10, n_units
, "b")
2182 & ~LONGINT_INVALID_SUFFIX_CHAR
)
2184 error (EXIT_FAILURE
, errno
, "%s: %s", _("invalid number"),
2188 from_start
= t_from_start
;
2189 count_lines
= t_count_lines
;
2190 forever
= t_forever
;
2196 parse_options (int argc
, char **argv
,
2197 uintmax_t *n_units
, enum header_mode
*header_mode
,
2198 double *sleep_interval
)
2202 while ((c
= getopt_long (argc
, argv
, "c:n:fFqs:vz0123456789",
2203 long_options
, nullptr))
2210 follow_mode
= Follow_name
;
2211 reopen_inaccessible_files
= true;
2216 count_lines
= (c
== 'n');
2219 else if (*optarg
== '-')
2222 *n_units
= xnumtoumax (optarg
, 10, 0, UINTMAX_MAX
, "bkKmMGTPEZYRQ0",
2224 ? _("invalid number of lines")
2225 : _("invalid number of bytes"))
2226 , 0, XTOINT_MAX_QUIET
);
2230 case LONG_FOLLOW_OPTION
:
2232 if (optarg
== nullptr)
2233 follow_mode
= DEFAULT_FOLLOW_MODE
;
2235 follow_mode
= XARGMATCH ("--follow", optarg
,
2236 follow_mode_string
, follow_mode_map
);
2240 reopen_inaccessible_files
= true;
2243 case MAX_UNCHANGED_STATS_OPTION
:
2244 /* --max-unchanged-stats=N */
2245 max_n_unchanged_stats_between_opens
=
2246 xnumtoumax (optarg
, 10, 0, UINTMAX_MAX
, "",
2247 _("invalid maximum number of unchanged stats"
2249 0, XTOINT_MAX_QUIET
);
2252 case DISABLE_INOTIFY_OPTION
:
2253 disable_inotify
= true;
2257 if (nbpids
== pids_alloc
)
2258 pids
= xpalloc (pids
, &pids_alloc
, 1,
2259 MIN (INT_MAX
, PTRDIFF_MAX
), sizeof *pids
);
2260 pids
[nbpids
++] = xdectoumax (optarg
, 0, PID_T_MAX
, "",
2261 _("invalid PID"), 0);
2264 case PRESUME_INPUT_PIPE_OPTION
:
2265 presume_input_pipe
= true;
2269 *header_mode
= never
;
2275 if (! (xstrtod (optarg
, nullptr, &s
, cl_strtod
) && 0 <= s
))
2276 error (EXIT_FAILURE
, 0,
2277 _("invalid number of seconds: %s"), quote (optarg
));
2278 *sleep_interval
= s
;
2283 *header_mode
= always
;
2290 case_GETOPT_HELP_CHAR
;
2292 case_GETOPT_VERSION_CHAR (PROGRAM_NAME
, AUTHORS
);
2294 case '0': case '1': case '2': case '3': case '4':
2295 case '5': case '6': case '7': case '8': case '9':
2296 error (EXIT_FAILURE
, 0, _("option used in invalid context -- %c"), c
);
2299 usage (EXIT_FAILURE
);
2303 if (reopen_inaccessible_files
)
2307 reopen_inaccessible_files
= false;
2308 error (0, 0, _("warning: --retry ignored; --retry is useful"
2309 " only when following"));
2311 else if (follow_mode
== Follow_descriptor
)
2312 error (0, 0, _("warning: --retry only effective for the initial open"));
2315 if (nbpids
&& !forever
)
2317 _("warning: PID ignored; --pid=PID is useful only when following"));
2318 else if (nbpids
&& kill (pids
[0], 0) != 0 && errno
== ENOSYS
)
2320 error (0, 0, _("warning: --pid=PID is not supported on this system"));
2326 /* Mark as '.ignore'd each member of F that corresponds to a
2327 pipe or fifo, and return the number of non-ignored members. */
2329 ignore_fifo_and_pipe (struct File_spec
*f
, size_t n_files
)
2331 /* When there is no FILE operand and stdin is a pipe or FIFO
2332 POSIX requires that tail ignore the -f option.
2333 Since we allow multiple FILE operands, we extend that to say: with -f,
2334 ignore any "-" operand that corresponds to a pipe or FIFO. */
2335 size_t n_viable
= 0;
2337 for (size_t i
= 0; i
< n_files
; i
++)
2339 bool is_a_fifo_or_pipe
=
2340 (STREQ (f
[i
].name
, "-")
2343 && (S_ISFIFO (f
[i
].mode
)
2344 || (HAVE_FIFO_PIPES
!= 1 && isapipe (f
[i
].fd
))));
2345 if (is_a_fifo_or_pipe
)
2358 main (int argc
, char **argv
)
2360 enum header_mode header_mode
= multiple_files
;
2362 /* If from_start, the number of items to skip before printing; otherwise,
2363 the number of items at the end of the file to print. */
2364 uintmax_t n_units
= DEFAULT_N_LINES
;
2367 struct File_spec
*F
;
2369 bool obsolete_option
;
2371 /* The number of seconds to sleep between iterations.
2372 During one iteration, every file name or descriptor is checked to
2373 see if it has changed. */
2374 double sleep_interval
= 1.0;
2376 initialize_main (&argc
, &argv
);
2377 set_program_name (argv
[0]);
2378 setlocale (LC_ALL
, "");
2379 bindtextdomain (PACKAGE
, LOCALEDIR
);
2380 textdomain (PACKAGE
);
2382 atexit (close_stdout
);
2384 page_size
= getpagesize ();
2386 have_read_stdin
= false;
2389 forever
= from_start
= print_headers
= false;
2391 obsolete_option
= parse_obsolete_option (argc
, argv
, &n_units
);
2392 argc
-= obsolete_option
;
2393 argv
+= obsolete_option
;
2394 parse_options (argc
, argv
, &n_units
, &header_mode
, &sleep_interval
);
2396 /* To start printing with item N_UNITS from the start of the file, skip
2397 N_UNITS - 1 items. 'tail -n +0' is actually meaningless, but for Unix
2398 compatibility it's treated the same as 'tail -n +1'. */
2399 n_units
-= from_start
&& 0 < n_units
&& n_units
< UINTMAX_MAX
;
2403 n_files
= argc
- optind
;
2404 file
= argv
+ optind
;
2408 static char *dummy_stdin
= (char *) "-";
2410 file
= &dummy_stdin
;
2414 bool found_hyphen
= false;
2416 for (i
= 0; i
< n_files
; i
++)
2417 if (STREQ (file
[i
], "-"))
2418 found_hyphen
= true;
2420 /* When following by name, there must be a name. */
2421 if (found_hyphen
&& follow_mode
== Follow_name
)
2422 error (EXIT_FAILURE
, 0, _("cannot follow %s by name"), quoteaf ("-"));
2424 /* When following forever, and not using simple blocking, warn if
2425 any file is '-' as the stats() used to check for input are ineffective.
2426 This is only a warning, since tail's output (before a failing seek,
2427 and that from any non-stdin files) might still be useful. */
2428 if (forever
&& found_hyphen
)
2430 struct stat in_stat
;
2431 bool blocking_stdin
;
2432 blocking_stdin
= (!nbpids
&& follow_mode
== Follow_descriptor
2433 && n_files
== 1 && ! fstat (STDIN_FILENO
, &in_stat
)
2434 && ! S_ISREG (in_stat
.st_mode
));
2436 if (! blocking_stdin
&& isatty (STDIN_FILENO
))
2437 error (0, 0, _("warning: following standard input"
2438 " indefinitely is ineffective"));
2442 /* Don't read anything if we'll never output anything. */
2443 if (! forever
&& n_units
== (from_start
? UINTMAX_MAX
: 0))
2444 return EXIT_SUCCESS
;
2446 F
= xnmalloc (n_files
, sizeof *F
);
2447 for (i
= 0; i
< n_files
; i
++)
2448 F
[i
].name
= file
[i
];
2450 if (header_mode
== always
2451 || (header_mode
== multiple_files
&& n_files
> 1))
2452 print_headers
= true;
2454 xset_binary_mode (STDOUT_FILENO
, O_BINARY
);
2456 for (i
= 0; i
< n_files
; i
++)
2457 ok
&= tail_file (&F
[i
], n_units
);
2459 if (forever
&& ignore_fifo_and_pipe (F
, n_files
))
2461 /* If stdout is a fifo or pipe, then monitor it
2462 so that we exit if the reader goes away. */
2463 struct stat out_stat
;
2464 if (fstat (STDOUT_FILENO
, &out_stat
) < 0)
2465 error (EXIT_FAILURE
, errno
, _("standard output"));
2466 monitor_output
= (S_ISFIFO (out_stat
.st_mode
)
2467 || (HAVE_FIFO_PIPES
!= 1 && isapipe (STDOUT_FILENO
)));
2470 /* tailable_stdin() checks if the user specifies stdin via "-",
2471 or implicitly by providing no arguments. If so, we won't use inotify.
2472 Technically, on systems with a working /dev/stdin, we *could*,
2473 but would it be worth it? Verifying that it's a real device
2474 and hooked up to stdin is not trivial, while reverting to
2475 non-inotify-based tail_forever is easy and portable.
2477 any_remote_file() checks if the user has specified any
2478 files that reside on remote file systems. inotify is not used
2479 in this case because it would miss any updates to the file
2480 that were not initiated from the local system.
2482 any_non_remote_file() checks if the user has specified any
2483 files that don't reside on remote file systems. inotify is not used
2484 if there are no open files, as we can't determine if those file
2485 will be on a remote file system.
2487 any_symlinks() checks if the user has specified any symbolic links.
2488 inotify is not used in this case because it returns updated _targets_
2489 which would not match the specified names. If we tried to always
2490 use the target names, then we would miss changes to the symlink itself.
2492 ok is false when one of the files specified could not be opened for
2493 reading. In this case and when following by descriptor,
2494 tail_forever_inotify() cannot be used (in its current implementation).
2496 FIXME: inotify doesn't give any notification when a new
2497 (remote) file or directory is mounted on top a watched file.
2498 When follow_mode == Follow_name we would ideally like to detect that.
2499 Note if there is a change to the original file then we'll
2500 recheck it and follow the new file, or ignore it if the
2501 file has changed to being remote.
2503 FIXME-maybe: inotify has a watch descriptor per inode, and hence with
2504 our current hash implementation will only --follow data for one
2505 of the names when multiple hardlinked files are specified, or
2506 for one name when a name is specified multiple times. */
2507 if (!disable_inotify
&& (tailable_stdin (F
, n_files
)
2508 || any_remote_file (F
, n_files
)
2509 || ! any_non_remote_file (F
, n_files
)
2510 || any_symlinks (F
, n_files
)
2511 || any_non_regular_fifo (F
, n_files
)
2512 || (!ok
&& follow_mode
== Follow_descriptor
)))
2513 disable_inotify
= true;
2515 if (!disable_inotify
)
2517 int wd
= inotify_init ();
2520 /* Flush any output from tail_file, now, since
2521 tail_forever_inotify flushes only after writing,
2522 not before reading. */
2523 if (fflush (stdout
) != 0)
2527 tail_forever_inotify (wd
, F
, n_files
, sleep_interval
, &ht
);
2532 error (0, errno
, _("inotify cannot be used, reverting to polling"));
2535 disable_inotify
= true;
2536 tail_forever (F
, n_files
, sleep_interval
);
2539 if (have_read_stdin
&& close (STDIN_FILENO
) < 0)
2540 error (EXIT_FAILURE
, errno
, "-");
2541 main_exit (ok
? EXIT_SUCCESS
: EXIT_FAILURE
);