1

Android アプリで __NR_perf_event_open の syscall を使用したいと考えています。

コードは 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:不正なファイル記述子」というエラー情報が表示されました。

4

2 に答える 2

0

pid == -1 および cpu == -1 が無効であるためです。http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.htmlで確認できます

于 2013-04-08T13:52:28.097 に答える