我对filp_open
函数有疑问:
我可以从IS_ERR
函数中获取错误编号,但我不明白错误编号的含义。
哪里可以找到filp_open
错误编号定义?
答案 0 :(得分:3)
您不应该使用filp_open
在内核模式下读/写文件。出于(明显的)安全原因。其他原因可以找到in this answer和this answer(取自this comment)。 official documentation也建议不要使用flp_open
:
如果你真的需要,这是从kernelspace打开文件的助手。但一般来说你不应该这样做,所以请继续前进,没有什么可看的......
内核在内核空间中使用与用户空间中相同的错误号(errno)。因此,正如OmnipotentEntity指出的那样,您可以看到man errno
以获取有关错误通常含义的参考。
查看filp_open
的实际实施及其可能的错误来源(例如file_open_name
和build_open_flags
)也很有帮助。
请注意,IS_ERR
不会返回错误,但只返回提供的指针是否为错误值。在PTR_ERR
为真的情况下,您必须使用IS_ERR
从指针中检索错误值。例如:
fptr = filp_open(...)
if (IS_ERR(fptr)) {
printk("%d\n", PTR_ERR(fptr));
}