如何读取程序中的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

如果你没有根访问权限,那你就太倒霉了。

08-17 11:37