1 /* tail -- output the last part of file(s)
2 Copyright (C) 1989-1991, 1995-2006, 2008-2010 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
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>. */
31 #include <sys/types.h>
42 #include "safe-read.h"
43 #include "stat-time.h"
45 #include "xnanosleep.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. */
57 # if HAVE_SYS_STATFS_H
58 # include <sys/statfs.h>
64 /* The official name of this program (e.g., no `g' prefix). */
65 #define PROGRAM_NAME "tail"
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
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. */
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. */
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
,
112 /* The actual file name, or "-" for stdin. */
115 /* Attributes of the file the last time we checked. */
117 struct timespec mtime
;
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. */
127 /* See the description of fremote. */
130 /* A file is tailable if it exists, is readable, and is of type
131 IS_TAILABLE_FILE_TYPE. */
134 /* File descriptor on which the file is open; -1 if it's not open. */
137 /* The value of errno seen last time we checked this file. */
140 /* 1 if O_NONBLOCK is clear, 0 if set, -1 if not known. */
144 /* The watch descriptor used by inotify. */
147 /* The parent directory watch descriptor. It is used only
148 * when Follow_name is used. */
151 /* Offset in NAME of the basename part. */
152 size_t basename_start
;
155 /* See description of DEFAULT_MAX_N_... below. */
156 uintmax_t n_unchanged_stats
;
160 /* The events mask used with inotify on files. This mask is not used on
162 const uint32_t inotify_wd_mask
= (IN_MODIFY
| IN_ATTRIB
| IN_DELETE_SELF
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. */
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. */
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. */
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. */
221 RETRY_OPTION
= CHAR_MAX
+ 1,
222 MAX_UNCHANGED_STATS_OPTION
,
224 PRESUME_INPUT_PIPE_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
},
253 if (status
!= EXIT_SUCCESS
)
254 fprintf (stderr
, _("Try `%s --help' for more information.\n"),
259 Usage: %s [OPTION]... [FILE]...\n\
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
);
269 Mandatory arguments to long options are mandatory for short options too.\n\
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\
276 -f, --follow[={name|descriptor}]\n\
277 output appended data as the file grows;\n\
278 -f, --follow, and --follow=descriptor are\n\
280 -F same as --follow=name --retry\n\
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\
292 DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS
295 --pid=PID with -f, terminate after process ID, PID dies\n\
296 -q, --quiet, --silent never output headers giving file names\n\
297 --retry keep trying to open a file even when it is or\n\
298 becomes inaccessible; useful when following by\n\
299 name, i.e., with --follow=name\n\
302 -s, --sleep-interval=N with -f, sleep for approximately N seconds\n\
303 (default 1.0) between iterations\n\
304 -v, --verbose always output headers giving file names\n\
306 fputs (HELP_OPTION_DESCRIPTION
, stdout
);
307 fputs (VERSION_OPTION_DESCRIPTION
, stdout
);
310 If the first character of K (the number of bytes or lines) is a `+',\n\
311 print beginning with the Kth item from the start of each file, otherwise,\n\
312 print the last K items in the file. K may have a multiplier suffix:\n\
313 b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,\n\
314 GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.\n\
318 With --follow (-f), tail defaults to following the file descriptor, which\n\
319 means that even if a tail'ed file is renamed, tail will continue to track\n\
320 its end. This default behavior is not desirable when you really want to\n\
321 track the actual name of the file, not the file descriptor (e.g., log\n\
322 rotation). Use --follow=name in that case. That causes tail to track the\n\
323 named file in a way that accommodates renaming, removal and creation.\n\
325 emit_ancillary_info ();
331 valid_file_spec (struct File_spec
const *f
)
333 /* Exactly one of the following subexpressions must be true. */
334 return ((f
->fd
== -1) ^ (f
->errnum
== 0));
338 pretty_name (struct File_spec
const *f
)
340 return (STREQ (f
->name
, "-") ? _("standard input") : f
->name
);
344 xwrite_stdout (char const *buffer
, size_t n_bytes
)
346 if (n_bytes
> 0 && fwrite (buffer
, 1, n_bytes
, stdout
) == 0)
347 error (EXIT_FAILURE
, errno
, _("write error"));
350 /* Record a file F with descriptor FD, size SIZE, status ST, and
351 blocking status BLOCKING. */
354 record_open_fd (struct File_spec
*f
, int fd
,
355 off_t size
, struct stat
const *st
,
360 f
->mtime
= get_stat_mtime (st
);
363 f
->mode
= st
->st_mode
;
364 f
->blocking
= blocking
;
365 f
->n_unchanged_stats
= 0;
369 /* Close the file with descriptor FD and name FILENAME. */
372 close_fd (int fd
, const char *filename
)
374 if (fd
!= -1 && fd
!= STDIN_FILENO
&& close (fd
))
376 error (0, errno
, _("closing %s (fd=%d)"), filename
, fd
);
381 write_header (const char *pretty_filename
)
383 static bool first_file
= true;
385 printf ("%s==> %s <==\n", (first_file
? "" : "\n"), pretty_filename
);
389 /* Read and output N_BYTES of file PRETTY_FILENAME starting at the current
390 position in FD. If N_BYTES is COPY_TO_EOF, then copy until end of file.
391 If N_BYTES is COPY_A_BUFFER, then copy at most one buffer's worth.
392 Return the number of bytes read from the file. */
395 dump_remainder (const char *pretty_filename
, int fd
, uintmax_t n_bytes
)
398 uintmax_t n_remaining
= n_bytes
;
404 size_t n
= MIN (n_remaining
, BUFSIZ
);
405 size_t bytes_read
= safe_read (fd
, buffer
, n
);
406 if (bytes_read
== SAFE_READ_ERROR
)
409 error (EXIT_FAILURE
, errno
, _("error reading %s"),
410 quote (pretty_filename
));
415 xwrite_stdout (buffer
, bytes_read
);
416 n_written
+= bytes_read
;
417 if (n_bytes
!= COPY_TO_EOF
)
419 n_remaining
-= bytes_read
;
420 if (n_remaining
== 0 || n_bytes
== COPY_A_BUFFER
)
428 /* Call lseek with the specified arguments, where file descriptor FD
429 corresponds to the file, FILENAME.
430 Give a diagnostic and exit nonzero if lseek fails.
431 Otherwise, return the resulting offset. */
434 xlseek (int fd
, off_t offset
, int whence
, char const *filename
)
436 off_t new_offset
= lseek (fd
, offset
, whence
);
437 char buf
[INT_BUFSIZE_BOUND (off_t
)];
443 s
= offtostr (offset
, buf
);
447 error (0, errno
, _("%s: cannot seek to offset %s"),
451 error (0, errno
, _("%s: cannot seek to relative offset %s"),
455 error (0, errno
, _("%s: cannot seek to end-relative offset %s"),
465 /* Print the last N_LINES lines from the end of file FD.
466 Go backward through the file, reading `BUFSIZ' bytes at a time (except
467 probably the first), until we hit the start of the file or have
468 read NUMBER newlines.
469 START_POS is the starting position of the read pointer for the file
470 associated with FD (may be nonzero).
471 END_POS is the file offset of EOF (one larger than offset of last byte).
472 Return true if successful. */
475 file_lines (const char *pretty_filename
, int fd
, uintmax_t n_lines
,
476 off_t start_pos
, off_t end_pos
, uintmax_t *read_pos
)
485 /* Set `bytes_read' to the size of the last, probably partial, buffer;
486 0 < `bytes_read' <= `BUFSIZ'. */
487 bytes_read
= (pos
- start_pos
) % BUFSIZ
;
490 /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
491 reads will be on block boundaries, which might increase efficiency. */
493 xlseek (fd
, pos
, SEEK_SET
, pretty_filename
);
494 bytes_read
= safe_read (fd
, buffer
, bytes_read
);
495 if (bytes_read
== SAFE_READ_ERROR
)
497 error (0, errno
, _("error reading %s"), quote (pretty_filename
));
500 *read_pos
= pos
+ bytes_read
;
502 /* Count the incomplete line on files that don't end with a newline. */
503 if (bytes_read
&& buffer
[bytes_read
- 1] != '\n')
508 /* Scan backward, counting the newlines in this bufferfull. */
510 size_t n
= bytes_read
;
514 nl
= memrchr (buffer
, '\n', n
);
520 /* If this newline isn't the last character in the buffer,
521 output the part that is after it. */
522 if (n
!= bytes_read
- 1)
523 xwrite_stdout (nl
+ 1, bytes_read
- (n
+ 1));
524 *read_pos
+= dump_remainder (pretty_filename
, fd
,
525 end_pos
- (pos
+ bytes_read
));
530 /* Not enough newlines in that bufferfull. */
531 if (pos
== start_pos
)
533 /* Not enough lines in the file; print everything from
534 start_pos to the end. */
535 xlseek (fd
, start_pos
, SEEK_SET
, pretty_filename
);
536 *read_pos
= start_pos
+ dump_remainder (pretty_filename
, fd
,
541 xlseek (fd
, pos
, SEEK_SET
, pretty_filename
);
543 bytes_read
= safe_read (fd
, buffer
, BUFSIZ
);
544 if (bytes_read
== SAFE_READ_ERROR
)
546 error (0, errno
, _("error reading %s"), quote (pretty_filename
));
550 *read_pos
= pos
+ bytes_read
;
552 while (bytes_read
> 0);
557 /* Print the last N_LINES lines from the end of the standard input,
558 open for reading as pipe FD.
559 Buffer the text as a linked list of LBUFFERs, adding them as needed.
560 Return true if successful. */
563 pipe_lines (const char *pretty_filename
, int fd
, uintmax_t n_lines
,
571 struct linebuffer
*next
;
573 typedef struct linebuffer LBUFFER
;
574 LBUFFER
*first
, *last
, *tmp
;
575 size_t total_lines
= 0; /* Total number of newlines in all buffers. */
577 size_t n_read
; /* Size in bytes of most recent read */
579 first
= last
= xmalloc (sizeof (LBUFFER
));
580 first
->nbytes
= first
->nlines
= 0;
582 tmp
= xmalloc (sizeof (LBUFFER
));
584 /* Input is always read into a fresh buffer. */
587 n_read
= safe_read (fd
, tmp
->buffer
, BUFSIZ
);
588 if (n_read
== 0 || n_read
== SAFE_READ_ERROR
)
590 tmp
->nbytes
= n_read
;
595 /* Count the number of newlines just read. */
597 char const *buffer_end
= tmp
->buffer
+ n_read
;
598 char const *p
= tmp
->buffer
;
599 while ((p
= memchr (p
, '\n', buffer_end
- p
)))
605 total_lines
+= tmp
->nlines
;
607 /* If there is enough room in the last buffer read, just append the new
608 one to it. This is because when reading from a pipe, `n_read' can
609 often be very small. */
610 if (tmp
->nbytes
+ last
->nbytes
< BUFSIZ
)
612 memcpy (&last
->buffer
[last
->nbytes
], tmp
->buffer
, tmp
->nbytes
);
613 last
->nbytes
+= tmp
->nbytes
;
614 last
->nlines
+= tmp
->nlines
;
618 /* If there's not enough room, link the new buffer onto the end of
619 the list, then either free up the oldest buffer for the next
620 read if that would leave enough lines, or else malloc a new one.
621 Some compaction mechanism is possible but probably not
623 last
= last
->next
= tmp
;
624 if (total_lines
- first
->nlines
> n_lines
)
627 total_lines
-= first
->nlines
;
631 tmp
= xmalloc (sizeof (LBUFFER
));
637 if (n_read
== SAFE_READ_ERROR
)
639 error (0, errno
, _("error reading %s"), quote (pretty_filename
));
644 /* If the file is empty, then bail out. */
645 if (last
->nbytes
== 0)
648 /* This prevents a core dump when the pipe contains no newlines. */
652 /* Count the incomplete line on files that don't end with a newline. */
653 if (last
->buffer
[last
->nbytes
- 1] != '\n')
659 /* Run through the list, printing lines. First, skip over unneeded
661 for (tmp
= first
; total_lines
- tmp
->nlines
> n_lines
; tmp
= tmp
->next
)
662 total_lines
-= tmp
->nlines
;
664 /* Find the correct beginning, then print the rest of the file. */
666 char const *beg
= tmp
->buffer
;
667 char const *buffer_end
= tmp
->buffer
+ tmp
->nbytes
;
668 if (total_lines
> n_lines
)
670 /* Skip `total_lines' - `n_lines' newlines. We made sure that
671 `total_lines' - `n_lines' <= `tmp->nlines'. */
673 for (j
= total_lines
- n_lines
; j
; --j
)
675 beg
= memchr (beg
, '\n', buffer_end
- beg
);
681 xwrite_stdout (beg
, buffer_end
- beg
);
684 for (tmp
= tmp
->next
; tmp
; tmp
= tmp
->next
)
685 xwrite_stdout (tmp
->buffer
, tmp
->nbytes
);
697 /* Print the last N_BYTES characters from the end of pipe FD.
698 This is a stripped down version of pipe_lines.
699 Return true if successful. */
702 pipe_bytes (const char *pretty_filename
, int fd
, uintmax_t n_bytes
,
709 struct charbuffer
*next
;
711 typedef struct charbuffer CBUFFER
;
712 CBUFFER
*first
, *last
, *tmp
;
713 size_t i
; /* Index into buffers. */
714 size_t total_bytes
= 0; /* Total characters in all buffers. */
718 first
= last
= xmalloc (sizeof (CBUFFER
));
721 tmp
= xmalloc (sizeof (CBUFFER
));
723 /* Input is always read into a fresh buffer. */
726 n_read
= safe_read (fd
, tmp
->buffer
, BUFSIZ
);
727 if (n_read
== 0 || n_read
== SAFE_READ_ERROR
)
730 tmp
->nbytes
= n_read
;
733 total_bytes
+= tmp
->nbytes
;
734 /* If there is enough room in the last buffer read, just append the new
735 one to it. This is because when reading from a pipe, `nbytes' can
736 often be very small. */
737 if (tmp
->nbytes
+ last
->nbytes
< BUFSIZ
)
739 memcpy (&last
->buffer
[last
->nbytes
], tmp
->buffer
, tmp
->nbytes
);
740 last
->nbytes
+= tmp
->nbytes
;
744 /* If there's not enough room, link the new buffer onto the end of
745 the list, then either free up the oldest buffer for the next
746 read if that would leave enough characters, or else malloc a new
747 one. Some compaction mechanism is possible but probably not
749 last
= last
->next
= tmp
;
750 if (total_bytes
- first
->nbytes
> n_bytes
)
753 total_bytes
-= first
->nbytes
;
758 tmp
= xmalloc (sizeof (CBUFFER
));
765 if (n_read
== SAFE_READ_ERROR
)
767 error (0, errno
, _("error reading %s"), quote (pretty_filename
));
772 /* Run through the list, printing characters. First, skip over unneeded
774 for (tmp
= first
; total_bytes
- tmp
->nbytes
> n_bytes
; tmp
= tmp
->next
)
775 total_bytes
-= tmp
->nbytes
;
777 /* Find the correct beginning, then print the rest of the file.
778 We made sure that `total_bytes' - `n_bytes' <= `tmp->nbytes'. */
779 if (total_bytes
> n_bytes
)
780 i
= total_bytes
- n_bytes
;
783 xwrite_stdout (&tmp
->buffer
[i
], tmp
->nbytes
- i
);
785 for (tmp
= tmp
->next
; tmp
; tmp
= tmp
->next
)
786 xwrite_stdout (tmp
->buffer
, tmp
->nbytes
);
798 /* Skip N_BYTES characters from the start of pipe FD, and print
799 any extra characters that were read beyond that.
800 Return 1 on error, 0 if ok, -1 if EOF. */
803 start_bytes (const char *pretty_filename
, int fd
, uintmax_t n_bytes
,
810 size_t bytes_read
= safe_read (fd
, buffer
, BUFSIZ
);
813 if (bytes_read
== SAFE_READ_ERROR
)
815 error (0, errno
, _("error reading %s"), quote (pretty_filename
));
818 read_pos
+= bytes_read
;
819 if (bytes_read
<= n_bytes
)
820 n_bytes
-= bytes_read
;
823 size_t n_remaining
= bytes_read
- n_bytes
;
825 xwrite_stdout (&buffer
[n_bytes
], n_remaining
);
833 /* Skip N_LINES lines at the start of file or pipe FD, and print
834 any extra characters that were read beyond that.
835 Return 1 on error, 0 if ok, -1 if EOF. */
838 start_lines (const char *pretty_filename
, int fd
, uintmax_t n_lines
,
848 size_t bytes_read
= safe_read (fd
, buffer
, BUFSIZ
);
849 char *buffer_end
= buffer
+ bytes_read
;
850 if (bytes_read
== 0) /* EOF */
852 if (bytes_read
== SAFE_READ_ERROR
) /* error */
854 error (0, errno
, _("error reading %s"), quote (pretty_filename
));
858 *read_pos
+= bytes_read
;
860 while ((p
= memchr (p
, '\n', buffer_end
- p
)))
866 xwrite_stdout (p
, buffer_end
- p
);
874 /* Without inotify support, always return false. Otherwise, return false
875 when FD is open on a file known to reside on a local file system.
876 If fstatfs fails, give a diagnostic and return true.
877 If fstatfs cannot be called, return true. */
879 fremote (int fd
, const char *name
)
881 bool remote
= true; /* be conservative (poll by default). */
883 # if HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE && defined __linux__
885 int err
= fstatfs (fd
, &buf
);
888 error (0, errno
, _("cannot determine location of %s. "
889 "reverting to polling"), quote (name
));
898 case S_MAGIC_FUSEBLK
:
899 case S_MAGIC_FUSECTL
:
918 /* Without inotify support, whether a file is remote is irrelevant.
919 Always return "false" in that case. */
920 # define fremote(fd, name) false
923 /* FIXME: describe */
926 recheck (struct File_spec
*f
, bool blocking
)
928 /* open/fstat the file and announce if dev/ino have changed */
929 struct stat new_stats
;
931 bool is_stdin
= (STREQ (f
->name
, "-"));
932 bool was_tailable
= f
->tailable
;
933 int prev_errnum
= f
->errnum
;
937 : open (f
->name
, O_RDONLY
| (blocking
? 0 : O_NONBLOCK
)));
939 assert (valid_file_spec (f
));
941 /* If the open fails because the file doesn't exist,
942 then mark the file as not tailable. */
943 f
->tailable
= !(reopen_inaccessible_files
&& fd
== -1);
945 if (fd
== -1 || fstat (fd
, &new_stats
) < 0)
953 /* FIXME-maybe: detect the case in which the file first becomes
954 unreadable (perms), and later becomes readable again and can
955 be seen to be the same file (dev/ino). Otherwise, tail prints
956 the entire contents of the file when it becomes readable. */
957 error (0, f
->errnum
, _("%s has become inaccessible"),
958 quote (pretty_name (f
)));
962 /* say nothing... it's still not tailable */
965 else if (prev_errnum
!= errno
)
967 error (0, errno
, "%s", pretty_name (f
));
970 else if (!IS_TAILABLE_FILE_TYPE (new_stats
.st_mode
))
974 error (0, 0, _("%s has been replaced with an untailable file;\
975 giving up on this name"),
976 quote (pretty_name (f
)));
979 else if (!disable_inotify
&& fremote (fd
, pretty_name (f
)))
983 error (0, 0, _("%s has been replaced with a remote file. "
984 "giving up on this name"), quote (pretty_name (f
)));
996 close_fd (fd
, pretty_name (f
));
997 close_fd (f
->fd
, pretty_name (f
));
1000 else if (prev_errnum
&& prev_errnum
!= ENOENT
)
1003 assert (f
->fd
== -1);
1004 error (0, 0, _("%s has become accessible"), quote (pretty_name (f
)));
1006 else if (f
->ino
!= new_stats
.st_ino
|| f
->dev
!= new_stats
.st_dev
)
1012 _("%s has appeared; following end of new file"),
1013 quote (pretty_name (f
)));
1017 /* Close the old one. */
1018 close_fd (f
->fd
, pretty_name (f
));
1020 /* File has been replaced (e.g., via log rotation) --
1021 tail the new one. */
1023 _("%s has been replaced; following end of new file"),
1024 quote (pretty_name (f
)));
1031 /* This happens when one iteration finds the file missing,
1032 then the preceding <dev,inode> pair is reused as the
1033 file is recreated. */
1038 close_fd (fd
, pretty_name (f
));
1044 /* Start at the beginning of the file. */
1045 record_open_fd (f
, fd
, 0, &new_stats
, (is_stdin
? -1 : blocking
));
1046 xlseek (fd
, 0, SEEK_SET
, pretty_name (f
));
1050 /* Return true if any of the N_FILES files in F are live, i.e., have
1051 open file descriptors. */
1054 any_live_files (const struct File_spec
*f
, size_t n_files
)
1058 for (i
= 0; i
< n_files
; i
++)
1064 /* Tail N_FILES files forever, or until killed.
1065 The pertinent information for each file is stored in an entry of F.
1066 Loop over each of them, doing an fstat to see if they have changed size,
1067 and an occasional open/fstat to see if any dev/ino pair has changed.
1068 If none of them have changed size in one iteration, sleep for a
1069 while and try again. Continue until the user interrupts us. */
1072 tail_forever (struct File_spec
*f
, size_t n_files
, double sleep_interval
)
1074 /* Use blocking I/O as an optimization, when it's easy. */
1075 bool blocking
= (pid
== 0 && follow_mode
== Follow_descriptor
1076 && n_files
== 1 && ! S_ISREG (f
[0].mode
));
1078 bool writer_is_dead
= false;
1085 bool any_input
= false;
1087 for (i
= 0; i
< n_files
; i
++)
1093 uintmax_t bytes_read
;
1100 recheck (&f
[i
], blocking
);
1105 name
= pretty_name (&f
[i
]);
1108 if (f
[i
].blocking
!= blocking
)
1110 int old_flags
= fcntl (fd
, F_GETFL
);
1111 int new_flags
= old_flags
| (blocking
? 0 : O_NONBLOCK
);
1113 || (new_flags
!= old_flags
1114 && fcntl (fd
, F_SETFL
, new_flags
) == -1))
1116 /* Don't update f[i].blocking if fcntl fails. */
1117 if (S_ISREG (f
[i
].mode
) && errno
== EPERM
)
1119 /* This happens when using tail -f on a file with
1120 the append-only attribute. */
1123 error (EXIT_FAILURE
, errno
,
1124 _("%s: cannot change nonblocking mode"), name
);
1127 f
[i
].blocking
= blocking
;
1132 if (fstat (fd
, &stats
) != 0)
1135 f
[i
].errnum
= errno
;
1136 error (0, errno
, "%s", name
);
1140 if (f
[i
].mode
== stats
.st_mode
1141 && (! S_ISREG (stats
.st_mode
) || f
[i
].size
== stats
.st_size
)
1142 && timespec_cmp (f
[i
].mtime
, get_stat_mtime (&stats
)) == 0)
1144 if ((max_n_unchanged_stats_between_opens
1145 <= f
[i
].n_unchanged_stats
++)
1146 && follow_mode
== Follow_name
)
1148 recheck (&f
[i
], f
[i
].blocking
);
1149 f
[i
].n_unchanged_stats
= 0;
1154 /* This file has changed. Print out what we can, and
1155 then keep looping. */
1157 f
[i
].mtime
= get_stat_mtime (&stats
);
1158 f
[i
].mode
= stats
.st_mode
;
1161 f
[i
].n_unchanged_stats
= 0;
1163 if (S_ISREG (mode
) && stats
.st_size
< f
[i
].size
)
1165 error (0, 0, _("%s: file truncated"), name
);
1167 xlseek (fd
, stats
.st_size
, SEEK_SET
, name
);
1168 f
[i
].size
= stats
.st_size
;
1175 write_header (name
);
1180 bytes_read
= dump_remainder (name
, fd
,
1182 ? COPY_A_BUFFER
: COPY_TO_EOF
));
1183 any_input
|= (bytes_read
!= 0);
1184 f
[i
].size
+= bytes_read
;
1187 if (! any_live_files (f
, n_files
) && ! reopen_inaccessible_files
)
1189 error (0, 0, _("no files remaining"));
1193 if ((!any_input
|| blocking
) && fflush (stdout
) != 0)
1194 error (EXIT_FAILURE
, errno
, _("write error"));
1196 /* If nothing was read, sleep and/or check for dead writers. */
1202 /* Once the writer is dead, read the files once more to
1203 avoid a race condition. */
1204 writer_is_dead
= (pid
!= 0
1205 && kill (pid
, 0) != 0
1206 /* Handle the case in which you cannot send a
1207 signal to the writer, so kill fails and sets
1211 if (!writer_is_dead
&& xnanosleep (sleep_interval
))
1212 error (EXIT_FAILURE
, errno
, _("cannot read realtime clock"));
1220 /* Return true if any of the N_FILES files in F is remote, i.e., has
1221 an open file descriptor and is on a network file system. */
1224 any_remote_file (const struct File_spec
*f
, size_t n_files
)
1228 for (i
= 0; i
< n_files
; i
++)
1229 if (0 <= f
[i
].fd
&& f
[i
].remote
)
1234 /* Return true if any of the N_FILES files in F represents
1235 stdin and is tailable. */
1238 tailable_stdin (const struct File_spec
*f
, size_t n_files
)
1242 for (i
= 0; i
< n_files
; i
++)
1243 if (!f
[i
].ignore
&& STREQ (f
[i
].name
, "-"))
1249 wd_hasher (const void *entry
, size_t tabsize
)
1251 const struct File_spec
*spec
= entry
;
1252 return spec
->wd
% tabsize
;
1256 wd_comparator (const void *e1
, const void *e2
)
1258 const struct File_spec
*spec1
= e1
;
1259 const struct File_spec
*spec2
= e2
;
1260 return spec1
->wd
== spec2
->wd
;
1263 /* Helper function used by `tail_forever_inotify'. */
1265 check_fspec (struct File_spec
*fspec
, int wd
, int *prev_wd
)
1268 char const *name
= pretty_name (fspec
);
1270 if (fstat (fspec
->fd
, &stats
) != 0)
1272 close_fd (fspec
->fd
, name
);
1274 fspec
->errnum
= errno
;
1278 if (S_ISREG (fspec
->mode
) && stats
.st_size
< fspec
->size
)
1280 error (0, 0, _("%s: file truncated"), name
);
1282 xlseek (fspec
->fd
, stats
.st_size
, SEEK_SET
, name
);
1283 fspec
->size
= stats
.st_size
;
1285 else if (S_ISREG (fspec
->mode
) && stats
.st_size
== fspec
->size
1286 && timespec_cmp (fspec
->mtime
, get_stat_mtime (&stats
)) == 0)
1292 write_header (name
);
1296 uintmax_t bytes_read
= dump_remainder (name
, fspec
->fd
, COPY_TO_EOF
);
1297 fspec
->size
+= bytes_read
;
1299 if (fflush (stdout
) != 0)
1300 error (EXIT_FAILURE
, errno
, _("write error"));
1303 /* Tail N_FILES files forever, or until killed.
1304 Check modifications using the inotify events system. */
1306 tail_forever_inotify (int wd
, struct File_spec
*f
, size_t n_files
,
1307 double sleep_interval
)
1309 unsigned int max_realloc
= 3;
1311 /* Map an inotify watch descriptor to the name of the file it's watching. */
1312 Hash_table
*wd_to_name
;
1314 bool found_watchable
= false;
1315 bool writer_is_dead
= false;
1319 size_t evbuf_off
= 0;
1322 wd_to_name
= hash_initialize (n_files
, NULL
, wd_hasher
, wd_comparator
, NULL
);
1326 /* Add an inotify watch for each watched file. If -F is specified then watch
1327 its parent directory too, in this way when they re-appear we can add them
1328 again to the watch list. */
1330 for (i
= 0; i
< n_files
; i
++)
1334 size_t fnlen
= strlen (f
[i
].name
);
1340 if (follow_mode
== Follow_name
)
1342 size_t dirlen
= dir_len (f
[i
].name
);
1343 char prev
= f
[i
].name
[dirlen
];
1344 f
[i
].basename_start
= last_component (f
[i
].name
) - f
[i
].name
;
1346 f
[i
].name
[dirlen
] = '\0';
1348 /* It's fine to add the same directory more than once.
1349 In that case the same watch descriptor is returned. */
1350 f
[i
].parent_wd
= inotify_add_watch (wd
, dirlen
? f
[i
].name
: ".",
1351 (IN_CREATE
| IN_MOVED_TO
1354 f
[i
].name
[dirlen
] = prev
;
1356 if (f
[i
].parent_wd
< 0)
1358 error (0, errno
, _("cannot watch parent directory of %s"),
1364 f
[i
].wd
= inotify_add_watch (wd
, f
[i
].name
, inotify_wd_mask
);
1368 if (errno
!= f
[i
].errnum
)
1369 error (0, errno
, _("cannot watch %s"), quote (f
[i
].name
));
1373 if (hash_insert (wd_to_name
, &(f
[i
])) == NULL
)
1376 found_watchable
= true;
1380 if (follow_mode
== Follow_descriptor
&& !found_watchable
)
1383 prev_wd
= f
[n_files
- 1].wd
;
1385 /* Check files again. New data can be available since last time we checked
1386 and before they are watched by inotify. */
1387 for (i
= 0; i
< n_files
; i
++)
1390 check_fspec (&f
[i
], f
[i
].wd
, &prev_wd
);
1393 evlen
+= sizeof (struct inotify_event
) + 1;
1394 evbuf
= xmalloc (evlen
);
1396 /* Wait for inotify events and handle them. Events on directories make sure
1397 that watched files can be re-added when -F is used.
1398 This loop sleeps on the `safe_read' call until a new event is notified. */
1401 struct File_spec
*fspec
;
1402 struct inotify_event
*ev
;
1404 /* When watching a PID, ensure that a read from WD will not block
1409 exit (EXIT_SUCCESS
);
1411 writer_is_dead
= (kill (pid
, 0) != 0 && errno
!= EPERM
);
1413 struct timeval delay
; /* how long to wait for file changes. */
1415 delay
.tv_sec
= delay
.tv_usec
= 0;
1418 delay
.tv_sec
= (time_t) sleep_interval
;
1419 delay
.tv_usec
= 1000000 * (sleep_interval
- delay
.tv_sec
);
1426 int file_change
= select (wd
+ 1, &rfd
, NULL
, NULL
, &delay
);
1428 if (file_change
== 0)
1430 else if (file_change
== -1)
1431 error (EXIT_FAILURE
, errno
, _("error monitoring inotify event"));
1434 if (len
<= evbuf_off
)
1436 len
= safe_read (wd
, evbuf
, evlen
);
1439 /* For kernels prior to 2.6.21, read returns 0 when the buffer
1441 if ((len
== 0 || (len
== SAFE_READ_ERROR
&& errno
== EINVAL
))
1446 evbuf
= xrealloc (evbuf
, evlen
);
1450 if (len
== 0 || len
== SAFE_READ_ERROR
)
1451 error (EXIT_FAILURE
, errno
, _("error reading inotify event"));
1454 ev
= (struct inotify_event
*) (evbuf
+ evbuf_off
);
1455 evbuf_off
+= sizeof (*ev
) + ev
->len
;
1457 if (ev
->len
) /* event on ev->name in watched directory */
1460 for (j
= 0; j
< n_files
; j
++)
1462 /* With N=hundreds of frequently-changing files, this O(N^2)
1463 process might be a problem. FIXME: use a hash table? */
1464 if (f
[j
].parent_wd
== ev
->wd
1465 && STREQ (ev
->name
, f
[j
].name
+ f
[j
].basename_start
))
1469 /* It is not a watched file. */
1473 /* It's fine to add the same file more than once. */
1474 int new_wd
= inotify_add_watch (wd
, f
[j
].name
, inotify_wd_mask
);
1477 error (0, errno
, _("cannot watch %s"), quote (f
[j
].name
));
1483 /* Remove `fspec' and re-add it using `new_fd' as its key. */
1484 hash_delete (wd_to_name
, fspec
);
1487 /* If the file was moved then inotify will use the source file wd for
1488 the destination file. Make sure the key is not present in the
1490 struct File_spec
*prev
= hash_delete (wd_to_name
, fspec
);
1491 if (prev
&& prev
!= fspec
)
1493 if (follow_mode
== Follow_name
)
1494 recheck (prev
, false);
1496 close_fd (prev
->fd
, pretty_name (prev
));
1499 if (hash_insert (wd_to_name
, fspec
) == NULL
)
1502 if (follow_mode
== Follow_name
)
1503 recheck (fspec
, false);
1507 struct File_spec key
;
1509 fspec
= hash_lookup (wd_to_name
, &key
);
1515 if (ev
->mask
& (IN_ATTRIB
| IN_DELETE_SELF
| IN_MOVE_SELF
))
1517 /* For IN_DELETE_SELF, we always want to remove the watch.
1518 However, for IN_MOVE_SELF (the file we're watching has
1519 been clobbered via a rename), when tailing by NAME, we
1520 must continue to watch the file. It's only when following
1521 by file descriptor that we must remove the watch. */
1522 if ((ev
->mask
& IN_DELETE_SELF
)
1523 || ((ev
->mask
& IN_MOVE_SELF
) && follow_mode
== Follow_descriptor
))
1525 inotify_rm_watch (wd
, fspec
->wd
);
1526 hash_delete (wd_to_name
, fspec
);
1528 if (follow_mode
== Follow_name
)
1529 recheck (fspec
, false);
1533 check_fspec (fspec
, ev
->wd
, &prev_wd
);
1538 /* Output the last N_BYTES bytes of file FILENAME open for reading in FD.
1539 Return true if successful. */
1542 tail_bytes (const char *pretty_filename
, int fd
, uintmax_t n_bytes
,
1543 uintmax_t *read_pos
)
1547 if (fstat (fd
, &stats
))
1549 error (0, errno
, _("cannot fstat %s"), quote (pretty_filename
));
1555 if ( ! presume_input_pipe
1556 && S_ISREG (stats
.st_mode
) && n_bytes
<= OFF_T_MAX
)
1558 xlseek (fd
, n_bytes
, SEEK_CUR
, pretty_filename
);
1559 *read_pos
+= n_bytes
;
1563 int t
= start_bytes (pretty_filename
, fd
, n_bytes
, read_pos
);
1567 *read_pos
+= dump_remainder (pretty_filename
, fd
, COPY_TO_EOF
);
1571 if ( ! presume_input_pipe
1572 && S_ISREG (stats
.st_mode
) && n_bytes
<= OFF_T_MAX
)
1574 off_t current_pos
= xlseek (fd
, 0, SEEK_CUR
, pretty_filename
);
1575 off_t end_pos
= xlseek (fd
, 0, SEEK_END
, pretty_filename
);
1576 off_t diff
= end_pos
- current_pos
;
1577 /* Be careful here. The current position may actually be
1578 beyond the end of the file. */
1579 off_t bytes_remaining
= diff
< 0 ? 0 : diff
;
1582 if (bytes_remaining
<= nb
)
1584 /* From the current position to end of file, there are no
1585 more bytes than have been requested. So reposition the
1586 file pointer to the incoming current position and print
1587 everything after that. */
1588 *read_pos
= xlseek (fd
, current_pos
, SEEK_SET
, pretty_filename
);
1592 /* There are more bytes remaining than were requested.
1594 *read_pos
= xlseek (fd
, -nb
, SEEK_END
, pretty_filename
);
1596 *read_pos
+= dump_remainder (pretty_filename
, fd
, n_bytes
);
1599 return pipe_bytes (pretty_filename
, fd
, n_bytes
, read_pos
);
1604 /* Output the last N_LINES lines of file FILENAME open for reading in FD.
1605 Return true if successful. */
1608 tail_lines (const char *pretty_filename
, int fd
, uintmax_t n_lines
,
1609 uintmax_t *read_pos
)
1613 if (fstat (fd
, &stats
))
1615 error (0, errno
, _("cannot fstat %s"), quote (pretty_filename
));
1621 int t
= start_lines (pretty_filename
, fd
, n_lines
, read_pos
);
1624 *read_pos
+= dump_remainder (pretty_filename
, fd
, COPY_TO_EOF
);
1628 off_t start_pos
= -1;
1631 /* Use file_lines only if FD refers to a regular file for
1632 which lseek (... SEEK_END) works. */
1633 if ( ! presume_input_pipe
1634 && S_ISREG (stats
.st_mode
)
1635 && (start_pos
= lseek (fd
, 0, SEEK_CUR
)) != -1
1636 && start_pos
< (end_pos
= lseek (fd
, 0, SEEK_END
)))
1638 *read_pos
= end_pos
;
1640 && ! file_lines (pretty_filename
, fd
, n_lines
,
1641 start_pos
, end_pos
, read_pos
))
1646 /* Under very unlikely circumstances, it is possible to reach
1647 this point after positioning the file pointer to end of file
1648 via the `lseek (...SEEK_END)' above. In that case, reposition
1649 the file pointer back to start_pos before calling pipe_lines. */
1650 if (start_pos
!= -1)
1651 xlseek (fd
, start_pos
, SEEK_SET
, pretty_filename
);
1653 return pipe_lines (pretty_filename
, fd
, n_lines
, read_pos
);
1659 /* Display the last N_UNITS units of file FILENAME, open for reading
1660 via FD. Set *READ_POS to the position of the input stream pointer.
1661 *READ_POS is usually the number of bytes read and corresponds to an
1662 offset from the beginning of a file. However, it may be larger than
1663 OFF_T_MAX (as for an input pipe), and may also be larger than the
1664 number of bytes read (when an input pointer is initially not at
1665 beginning of file), and may be far greater than the number of bytes
1666 actually read for an input file that is seekable.
1667 Return true if successful. */
1670 tail (const char *filename
, int fd
, uintmax_t n_units
,
1671 uintmax_t *read_pos
)
1675 return tail_lines (filename
, fd
, n_units
, read_pos
);
1677 return tail_bytes (filename
, fd
, n_units
, read_pos
);
1680 /* Display the last N_UNITS units of the file described by F.
1681 Return true if successful. */
1684 tail_file (struct File_spec
*f
, uintmax_t n_units
)
1689 bool is_stdin
= (STREQ (f
->name
, "-"));
1693 have_read_stdin
= true;
1695 if (O_BINARY
&& ! isatty (STDIN_FILENO
))
1696 xfreopen (NULL
, "rb", stdin
);
1699 fd
= open (f
->name
, O_RDONLY
| O_BINARY
);
1701 f
->tailable
= !(reopen_inaccessible_files
&& fd
== -1);
1713 error (0, errno
, _("cannot open %s for reading"),
1714 quote (pretty_name (f
)));
1722 write_header (pretty_name (f
));
1723 ok
= tail (pretty_name (f
), fd
, n_units
, &read_pos
);
1728 #if TEST_RACE_BETWEEN_FINAL_READ_AND_INITIAL_FSTAT
1729 /* Before the tail function provided `read_pos', there was
1730 a race condition described in the URL below. This sleep
1731 call made the window big enough to exercise the problem. */
1735 if (fstat (fd
, &stats
) < 0)
1739 error (0, errno
, _("error reading %s"), quote (pretty_name (f
)));
1741 else if (!IS_TAILABLE_FILE_TYPE (stats
.st_mode
))
1743 error (0, 0, _("%s: cannot follow end of this type of file;\
1744 giving up on this name"),
1753 close_fd (fd
, pretty_name (f
));
1758 /* Note: we must use read_pos here, not stats.st_size,
1759 to avoid a race condition described by Ken Raeburn:
1760 http://mail.gnu.org/archive/html/bug-textutils/2003-05/msg00007.html */
1761 record_open_fd (f
, fd
, read_pos
, &stats
, (is_stdin
? -1 : 1));
1762 f
->remote
= fremote (fd
, pretty_name (f
));
1767 if (!is_stdin
&& close (fd
))
1769 error (0, errno
, _("error reading %s"), quote (pretty_name (f
)));
1778 /* If obsolete usage is allowed, and the command line arguments are of
1779 the obsolete form and the option string is well-formed, set
1780 *N_UNITS, the globals COUNT_LINES, FOREVER, and FROM_START, and
1781 return true. If the command line arguments are obviously incorrect
1782 (e.g., because obsolete usage is not allowed and the arguments are
1783 incorrect for non-obsolete usage), report an error and exit.
1784 Otherwise, return false and don't modify any parameter or global
1788 parse_obsolete_option (int argc
, char * const *argv
, uintmax_t *n_units
)
1791 const char *n_string
;
1792 const char *n_string_end
;
1793 bool obsolete_usage
;
1794 int default_count
= DEFAULT_N_LINES
;
1796 bool t_count_lines
= true;
1797 bool t_forever
= false;
1799 /* With the obsolete form, there is one option string and at most
1800 one file argument. Watch out for "-" and "--", though. */
1802 || (argc
== 3 && ! (argv
[2][0] == '-' && argv
[2][1]))
1803 || (3 <= argc
&& argc
<= 4 && STREQ (argv
[2], "--"))))
1806 obsolete_usage
= (posix2_version () < 200112);
1815 /* Leading "+" is a file name in the non-obsolete form. */
1816 if (!obsolete_usage
)
1819 t_from_start
= true;
1823 /* In the non-obsolete form, "-" is standard input and "-c"
1824 requires an option-argument. The obsolete multidigit options
1825 are supported as a GNU extension even when conforming to
1826 POSIX 1003.1-2001, so don't complain about them. */
1827 if (!obsolete_usage
&& !p
[p
[0] == 'c'])
1830 t_from_start
= false;
1835 while (ISDIGIT (*p
))
1841 case 'b': default_count
*= 512; /* Fall through. */
1842 case 'c': t_count_lines
= false; /* Fall through. */
1843 case 'l': p
++; break;
1855 if (n_string
== n_string_end
)
1856 *n_units
= default_count
;
1857 else if ((xstrtoumax (n_string
, NULL
, 10, n_units
, "b")
1858 & ~LONGINT_INVALID_SUFFIX_CHAR
)
1860 error (EXIT_FAILURE
, 0, _("number in %s is too large"), quote (argv
[1]));
1863 from_start
= t_from_start
;
1864 count_lines
= t_count_lines
;
1865 forever
= t_forever
;
1871 parse_options (int argc
, char **argv
,
1872 uintmax_t *n_units
, enum header_mode
*header_mode
,
1873 double *sleep_interval
)
1877 while ((c
= getopt_long (argc
, argv
, "c:n:fFqs:v0123456789",
1878 long_options
, NULL
))
1885 follow_mode
= Follow_name
;
1886 reopen_inaccessible_files
= true;
1891 count_lines
= (c
== 'n');
1894 else if (*optarg
== '-')
1899 s_err
= xstrtoumax (optarg
, NULL
, 10, n_units
, "bkKmMGTPEZY0");
1900 if (s_err
!= LONGINT_OK
)
1902 error (EXIT_FAILURE
, 0, "%s: %s", optarg
,
1904 ? _("invalid number of lines")
1905 : _("invalid number of bytes")));
1911 case LONG_FOLLOW_OPTION
:
1914 follow_mode
= DEFAULT_FOLLOW_MODE
;
1916 follow_mode
= XARGMATCH ("--follow", optarg
,
1917 follow_mode_string
, follow_mode_map
);
1921 reopen_inaccessible_files
= true;
1924 case MAX_UNCHANGED_STATS_OPTION
:
1925 /* --max-unchanged-stats=N */
1926 if (xstrtoumax (optarg
, NULL
, 10,
1927 &max_n_unchanged_stats_between_opens
,
1931 error (EXIT_FAILURE
, 0,
1932 _("%s: invalid maximum number of unchanged stats between opens"),
1937 case DISABLE_INOTIFY_OPTION
:
1938 disable_inotify
= true;
1944 unsigned long int tmp_ulong
;
1945 s_err
= xstrtoul (optarg
, NULL
, 10, &tmp_ulong
, "");
1946 if (s_err
!= LONGINT_OK
|| tmp_ulong
> PID_T_MAX
)
1948 error (EXIT_FAILURE
, 0, _("%s: invalid PID"), optarg
);
1954 case PRESUME_INPUT_PIPE_OPTION
:
1955 presume_input_pipe
= true;
1959 *header_mode
= never
;
1965 if (! (xstrtod (optarg
, NULL
, &s
, c_strtod
) && 0 <= s
))
1966 error (EXIT_FAILURE
, 0,
1967 _("%s: invalid number of seconds"), optarg
);
1968 *sleep_interval
= s
;
1973 *header_mode
= always
;
1976 case_GETOPT_HELP_CHAR
;
1978 case_GETOPT_VERSION_CHAR (PROGRAM_NAME
, AUTHORS
);
1980 case '0': case '1': case '2': case '3': case '4':
1981 case '5': case '6': case '7': case '8': case '9':
1982 error (EXIT_FAILURE
, 0,
1983 _("option used in invalid context -- %c"), c
);
1986 usage (EXIT_FAILURE
);
1990 if (reopen_inaccessible_files
&& follow_mode
!= Follow_name
)
1991 error (0, 0, _("warning: --retry is useful mainly when following by name"));
1993 if (pid
&& !forever
)
1995 _("warning: PID ignored; --pid=PID is useful only when following"));
1996 else if (pid
&& kill (pid
, 0) != 0 && errno
== ENOSYS
)
1998 error (0, 0, _("warning: --pid=PID is not supported on this system"));
2003 /* Mark as '.ignore'd each member of F that corresponds to a
2004 pipe or fifo, and return the number of non-ignored members. */
2006 ignore_fifo_and_pipe (struct File_spec
*f
, size_t n_files
)
2008 /* When there is no FILE operand and stdin is a pipe or FIFO
2009 POSIX requires that tail ignore the -f option.
2010 Since we allow multiple FILE operands, we extend that to say: with -f,
2011 ignore any "-" operand that corresponds to a pipe or FIFO. */
2012 size_t n_viable
= 0;
2015 for (i
= 0; i
< n_files
; i
++)
2017 bool is_a_fifo_or_pipe
=
2018 (STREQ (f
[i
].name
, "-")
2021 && (S_ISFIFO (f
[i
].mode
)
2022 || (HAVE_FIFO_PIPES
!= 1 && isapipe (f
[i
].fd
))));
2023 if (is_a_fifo_or_pipe
)
2033 main (int argc
, char **argv
)
2035 enum header_mode header_mode
= multiple_files
;
2037 /* If from_start, the number of items to skip before printing; otherwise,
2038 the number of items at the end of the file to print. Although the type
2039 is signed, the value is never negative. */
2040 uintmax_t n_units
= DEFAULT_N_LINES
;
2043 struct File_spec
*F
;
2045 bool obsolete_option
;
2047 /* The number of seconds to sleep between iterations.
2048 During one iteration, every file name or descriptor is checked to
2049 see if it has changed. */
2050 double sleep_interval
= 1.0;
2052 initialize_main (&argc
, &argv
);
2053 set_program_name (argv
[0]);
2054 setlocale (LC_ALL
, "");
2055 bindtextdomain (PACKAGE
, LOCALEDIR
);
2056 textdomain (PACKAGE
);
2058 atexit (close_stdout
);
2060 have_read_stdin
= false;
2063 forever
= from_start
= print_headers
= false;
2064 obsolete_option
= parse_obsolete_option (argc
, argv
, &n_units
);
2065 argc
-= obsolete_option
;
2066 argv
+= obsolete_option
;
2067 parse_options (argc
, argv
, &n_units
, &header_mode
, &sleep_interval
);
2069 /* To start printing with item N_UNITS from the start of the file, skip
2070 N_UNITS - 1 items. `tail -n +0' is actually meaningless, but for Unix
2071 compatibility it's treated the same as `tail -n +1'. */
2080 n_files
= argc
- optind
;
2081 file
= argv
+ optind
;
2085 static char *dummy_stdin
= (char *) "-";
2087 file
= &dummy_stdin
;
2091 bool found_hyphen
= false;
2093 for (i
= 0; i
< n_files
; i
++)
2094 if (STREQ (file
[i
], "-"))
2095 found_hyphen
= true;
2097 /* When following by name, there must be a name. */
2098 if (found_hyphen
&& follow_mode
== Follow_name
)
2099 error (EXIT_FAILURE
, 0, _("cannot follow %s by name"), quote ("-"));
2101 /* When following forever, warn if any file is `-'.
2102 This is only a warning, since tail's output (before a failing seek,
2103 and that from any non-stdin files) might still be useful. */
2104 if (forever
&& found_hyphen
&& isatty (STDIN_FILENO
))
2105 error (0, 0, _("warning: following standard input"
2106 " indefinitely is ineffective"));
2109 F
= xnmalloc (n_files
, sizeof *F
);
2110 for (i
= 0; i
< n_files
; i
++)
2111 F
[i
].name
= file
[i
];
2113 if (header_mode
== always
2114 || (header_mode
== multiple_files
&& n_files
> 1))
2115 print_headers
= true;
2117 if (O_BINARY
&& ! isatty (STDOUT_FILENO
))
2118 xfreopen (NULL
, "wb", stdout
);
2120 for (i
= 0; i
< n_files
; i
++)
2121 ok
&= tail_file (&F
[i
], n_units
);
2123 if (forever
&& ignore_fifo_and_pipe (F
, n_files
))
2126 /* tailable_stdin() checks if the user specifies stdin via "-",
2127 or implicitly by providing no arguments. If so, we won't use inotify.
2128 Technically, on systems with a working /dev/stdin, we *could*,
2129 but would it be worth it? Verifying that it's a real device
2130 and hooked up to stdin is not trivial, while reverting to
2131 non-inotify-based tail_forever is easy and portable.
2133 any_remote_file() checks if the user has specified any
2134 files that reside on remote file systems. inotify is not used
2135 in this case because it would miss any updates to the file
2136 that were not initiated from the local system.
2138 FIXME: inotify doesn't give any notification when a new
2139 (remote) file or directory is mounted on top a watched file.
2140 When follow_mode == Follow_name we would ideally like to detect that.
2141 Note if there is a change to the original file then we'll
2142 recheck it and follow the new file, or ignore it if the
2143 file has changed to being remote. */
2144 if (tailable_stdin (F
, n_files
) || any_remote_file (F
, n_files
))
2145 disable_inotify
= true;
2147 if (!disable_inotify
)
2149 int wd
= inotify_init ();
2151 error (0, errno
, _("inotify cannot be used, reverting to polling"));
2154 /* Flush any output from tail_file, now, since
2155 tail_forever_inotify flushes only after writing,
2156 not before reading. */
2157 if (fflush (stdout
) != 0)
2158 error (EXIT_FAILURE
, errno
, _("write error"));
2160 tail_forever_inotify (wd
, F
, n_files
, sleep_interval
);
2162 /* The only way the above returns is upon failure. */
2163 exit (EXIT_FAILURE
);
2167 tail_forever (F
, n_files
, sleep_interval
);
2170 if (have_read_stdin
&& close (STDIN_FILENO
) < 0)
2171 error (EXIT_FAILURE
, errno
, "-");
2172 exit (ok
? EXIT_SUCCESS
: EXIT_FAILURE
);