我使用klogctl
(或syslog
)通过重复获取输出来收集内核日志消息。
我想知道是否有可能获得与内核日志关联的文件描述符,以便我可以使用select
来观看它(我已经在观看与{{{0}相关联的其他文件描述符了{{ 1}},使用udev_monitor_get_fd
对所有事情都很方便
答案 0 :(得分:2)
对于高于3.5的内核版本,/dev/kmsg
包含所有内核日志。
它打开如下:
int fk = open("/dev/kmsg", O_RDONLY | O_NONBLOCK);
此时只能通过查找此文件的末尾来获取程序中某个特定点的最新内核消息:
lseek(fk, 0, SEEK_END);
然后将fk
添加到以常规方式设置的文件描述符中。
答案 1 :(得分:0)
最好的办法是配置rsyslogd将所有消息记录到您选择的fifo(mkfifo
),然后打开并选择从中读取。