我想在我的Android应用中使用__NR_perf_event_open的系统调用。
代码在Linux上正常运行,但在Android上不起作用。
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <perf_event.h>
#include <asm/unistd.h>
long perf_event_open( struct perf_event_attr *hw_event, pid_t pid,
int cpu, int group_fd, unsigned long flags )
{
int ret;
ret = syscall( __NR_perf_event_open, hw_event, pid, cpu,
group_fd, flags );
return ret;
}
int main() {
//In the main function, I call perf_event_open:
struct perf_event_attr pe;
int fd;
fd = perf_event_open(&pe, 0, -1, -1, 0);
...
}
但是,fd始终返回值-1。当我使用“errno.h”时,它给出了错误信息:EBADF:错误的文件描述符。
答案 0 :(得分:0)
因为pid == -1且cpu == -1无效。你可以在http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html
中查看答案 1 :(得分:0)
你还没有配置“struct perf_event_attr pe;”但