1.复制如下代码到一个新建的tailf.c
文件里。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <malloc.h>
#include <sys/stat.h>
#define _(s) s
static size_t filesize(const char *filename)
{
struct stat sb;
if (!stat(filename, &sb)) return sb.st_size;
return 0;
}
static void tailf(const char *filename, int lines)
{
char **buffer;
int head = 0;
int tail = 0;
FILE *str;
int i;
if (!(str = fopen(filename, "r"))) {
fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
perror("");
exit(1);
}
buffer = malloc(lines * sizeof(*buffer));
for (i = 0; i < lines; i++) buffer[i] = malloc(BUFSIZ + 1);
while (fgets(buffer[tail], BUFSIZ, str)) {
if (++tail >= lines) {
tail = 0;
head = 1;
}
}
if (head) {
for (i = tail; i < lines; i++) fputs(buffer[i], stdout);
for (i = 0; i < tail; i++) fputs(buffer[i], stdout);
} else {
for (i = head; i < tail; i++) fputs(buffer[i], stdout);
}
fflush(stdout);
for (i = 0; i < lines; i++) free(buffer[i]);
free(buffer);
}
int main(int argc, char **argv)
{
char buffer[BUFSIZ];
size_t osize, nsize;
FILE *str;
const char *filename;
int count;
if (argc != 2) {
fprintf(stderr, _("Usage: tailf logfile\n"));
exit(1);
}
filename = argv[1];
tailf(filename, 10);
for (osize = filesize(filename);;) {
nsize = filesize(filename);
if (nsize != osize) {
if (!(str = fopen(filename, "r"))) {
fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
perror(argv[0]);
exit(1);
}
if (!fseek(str, osize, SEEK_SET))
while ((count = fread(buffer, 1, sizeof(buffer), str)) > 0)
fwrite(buffer, 1, count, stdout);
fflush(stdout);
fclose(str);
osize = nsize;
}
usleep(250000);
}
return 0;
}
2.进入/usr/bin
目录
将tailf.c
文件拷贝到 /usr/bin
目录下,
3.运行命令
gcc -o /usr/bin/tailf tailf.c
即可。
如果运行报错,应该是没有安装gcc
,运行yum -y install gcc-c++
(CentOS系统) 或apt-get install gcc-c++
(Linux系统)
4.使用
找一个xxx.log
文件或者其他你想看的文件,使用命令 tailf xxx.log
查看文件内容(或进程)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)