我正在尝试在纯C中实现一个解决方案,以监控对日志文件所做的新条目,这些条目会向Web服务记录大量请求。
我想像tail -f这样的东西,日志文件中的更改会导致我的进程立即获得新的更改。
不幸的是,这需要在Solaris 10上运行。
我知道这个问题已在其他主题中被提及并回答,但我的情况无法接受任何解决方案
1)解决方案不得以任何方式要求超级用户访问。由于这是一个企业生产环境,因此我无法在此系统上访问超级用户,因此我无法执行安装驱动程序等操作。
2)日志文件非常大。完全解析它,反复进行新的改变是不可接受的。
在我看来,如果我可以将tail -f作为非特权用户运行,我应该能够以编程方式执行相同的用户。我意识到一个不错的黑客就是将tail -f的输出传输到我的进程中,尽管我想要更清洁。
答案 0 :(得分:2)
这非常简单 - 只需读取,如果您读取零字节,请等待指定的时间。仅用于说明(打开您自己的文件并改进缓冲区和错误处理)。我编辑了这个以显示错误处理和寻找最后一行的位置,并修复了sleep()的位置。这绝不是一个完整的例子,只是表明事情是如何完成的。
#include <unistd.h>
#include <stdio.h>
#define NBUF 1024
int main()
{
char buf[NBUF];
ssize_t rcount, wcount;
int fin = 0, fout = 1; /* Or use open. */
/* Code to display the last 10 lines goes here. */
while (1)
{
while ((rcount = read (fin, buf, NBUF)) > 0)
{
wcount = write (fout, buf, rcount);
if (wcount != rcount)
{
perror("write didn't work.");
/* Handle error here, exit() or whatever. */
}
}
if (rcount == -1)
{
perror("Read didn_t work...");
/* Handle error here, exit() or something else. */
sleep (1);
}
}