ioctl返回-1,并将errno设置为EPERM

时间:2009-04-07 18:01:52

标签: linux linux-device-driver

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

你能否告诉我为什么ioctl仍然返回-1并且errno设置为EPERM?

谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

您可能希望阅读功能,或者只是像其他人建议的那样以root身份运行您的应用程序。

Linux Man Page for Capabilities

答案 1 :(得分:-1)

是的,EPERM(不允许操作)错误表示您没有足够的权限来执行操作。如 liw.fi 建议,尝试使用root权限执行或告诉我们要执行的操作。