我读到我们需要超级用户权限才能从用户空间访问I / O端口。但是我说的是不同的行为。 ioperm在普通用户下成功。

#include <stdio.h>
#include <errno.h>
#include <sys/io.h>

int main(int argc, char *argv[])
{
    if (!ioperm(0x70, 3, 1)) {
        perror("ioperm failed");
    }
    else {
        printf("ioperm on 0x70 success\n");
    }

    return 0;
}

$ ./prog
ioperm on 0x70 success


这是预期的行为

最佳答案

the manual


  成功时,返回零。如果出错,则返回-1,并正确设置errno。


你有这个倒退。 -1表示失败,但是您的代码错误地认为这表示成功。

09-28 05:01