如何读取程序中的dmesg输出?
谢谢。。
最佳答案
您可以编写一些android ndk代码来调用klogctl函数。类似于:
#include <sys/klog.h>
#define KLOG_READ_ALL 3
#define KLOG_LEN (1 << 17)
char buf[KLOG_LEN];
if (klogctl(KLOG_READ_ALL, buf, KLOG_LEN) < 0)
{
printf("Error %s reading dmesg\n", strerror(errno));
}
else
{
/* do something with contents of buf */
}
然而,在android 4.1jelly bean中,他们实现了一个安全特性,不允许访问dmesg消息。上面的代码将失败,并出现“不允许操作”错误。如果您对设备具有根访问权限,则可以关闭dmesg\u restrict:
echo 0 > /proc/sys/kernel/dmesg_restrict
另外,最近的一些设备启用了selinux,在这种情况下,您需要执行以下操作
setenforce 0
如果你没有根访问权限,那你就太倒霉了。