从 C 程序观看 Linux Syslog 上的新条目
我想编写一个程序来监视系统日志并在 PPP 身份验证失败时执行操作。
我认为“tail -f /var/log/syslog”可以提供帮助,但我不确定如何使用它......可能使用管道?
我发现了用 bash 编写的类似内容,但我不确定如何在 C 中实现它。
这是 bash 方法:
首先使用 mkfifo 创建一个命名管道:
$ mkfifo -p /home/mezgani/syslog.pipe
使 syslog.conf 指向此文件:
*.info |/home/mezgani/syslog.pipe
重新启动 syslog:
$ sudo pkill -HUP syslogd
创建读取管道的处理脚本
$ cat > foo
#!/bin/bash
cat /home/mezgani/syslog.pipe | while read input
do
# some stuff
echo ${input}
# ….
done
I want to write a program that monitors syslog and performs an action when PPP authentication fails.
I think "tail -f /var/log/syslog" could help, but I'm not sure how to use it... probably using pipes?
I have found something similar written in bash, but I'm not sure how to implement it in C.
This is the bash method:
First create a named pipe using mkfifo:
$ mkfifo -p /home/mezgani/syslog.pipe
Make syslog.conf to points to this file:
*.info |/home/mezgani/syslog.pipe
Restart syslog:
$ sudo pkill -HUP syslogd
Create processing script that read the pipe
$ cat > foo
#!/bin/bash
cat /home/mezgani/syslog.pipe | while read input
do
# some stuff
echo ${input}
# ….
done
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
终于我找到了解决方案!
解决方案是使用命名管道!
首先,我需要创建一个命名管道:
mkfifo /pipe
然后,我向管道提供日志信息:
tail -f /var/log/syslog > /pipe
然后,我使用 OPEN 从 C 程序中读取管道
Finally I could found the solution!!
The solution was using named pipes!
First, I need to create a named pipe:
mkfifo /pipe
Then, I feed the pipe with the log info:
tail -f /var/log/syslog > /pipe
And then, I read the pipe from the C program using OPEN
尝试使用inotify函数。使用它您可以监视文件或目录是否已更改。
Try to use inotify function. Using it you can monitor if a file or directory has changed.