我想从外部实用程序更改ASL记录器过滤器设置。
但是,我希望尽可能少地降低性能。
目前我通过创建一个特殊文件来保存记录器级别参数, 并通过以下命令更改它
echo LOGGER_LEVEL > /etc/syslog_MODULE.conf
在使用记录器的应用程序中,有一个特殊的线程将文件映射到虚拟内存空间,并检查每个间隔是否应提交新的记录器级别。
这是映射部分:
const char * mmap_config()
{
int fd;
char *data;
struct stat sbuf;
if ((fd = open("/tmp/conf", O_RDONLY)) == -1) {
perror("open");
exit(1);
}
if (stat("/tmp/conf", &sbuf) == -1) {
perror("stat");
exit(1);
}
data = (char *)mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
if (data == (caddr_t)(-1)) {
perror("mmap");
exit(1);
}
return data;
}
这是寻找记录器级别变化的循环:
int main() {
const char* x = mmap_config();
while (1) {
int y = atoi(x);
asl_set_filter(log_asl_client, ASL_FILTER_MASK_UPTO(y));
sleep(5);
}
}
或许有更简单的方法可以通过更小的性能足迹来实现这一目标?
谢谢