1

我有一个调用ioctl()的 C 程序,但它返回 -1 并且errno设置为EPERM。但我已将该文件的模式更改为“777”。

你能告诉我为什么ioctl()仍然返回 -1 并将errno设置为EPERM吗?

4

2 回答 2

0

您调用 ioctl 的设备可能包含一些代码,这些代码会在执行您请求的操作之前检查功能。在这种情况下,将特殊文件的权限设置为 777 是不够的。如果您想深入了解支持相关设备的驱动程序的源代码,您可以查找类似于以下内容的内容,以确定实际需要哪些功能。

if (! capable (CAP_SYS_ADMIN))
    return -EPERM;

您可能想了解有关功能的信息,或者只是按照其他人的建议以 root 身份运行您的应用程序。

Linux 功能手册页

于 2009-10-17T22:48:32.283 回答
-1

是的,EPERM(不允许操作)错误表明您没有足够的权限来执行该操作。正如 liw.fi建议的那样,尝试以 root 权限执行或告诉我们要执行的操作是什么。

于 2009-07-08T08:22:47.657 回答