perror() 在内核中会是什么?我无法从错误值中分辨出错误代码是什么,即仅 -22 。
问问题
1963 次
2 回答
1
Linux 内核只是使用否定的 errno 代码作为约定。因此,请查看asm-generic/errno-base.h
或asm-generic/errno.h
找到...
#define EINVAL 22 /* Invalid argument */
例如,如果您传递NULL
给不接受的函数,就会发生这种情况NULL
。这取决于功能。
于 2012-04-04T06:44:34.473 回答
0
我知道这个问题很老,但我遇到了它,我找到了一个比接受的答案更令人满意的解决方法。
确实没有实际的错误,但可以以更好的方式打印错误(https://www.kernel.org/doc/html/latest/core-api/printk-formats.html#error-pointers)。ERR_PTR
如果我们有一个数值(基本上只是一个转换)并且我们已经确定,我们需要做的就是提供错误指针或使用函数转换它。
然后可以直接打印错误或创建自己的错误,如示例所示:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#define MYPERROR(str, err) printk(str ": %pe\n", ERR_PTR(error))
static int __init mymodule_init(void) {
int error = -22;
printk("The error is %pe\n", ERR_PTR(error));
MYPERROR("Failure", error);
return 0;
}
static void __exit mymodule_exit(void) {
}
module_init(mymodule_init);
module_exit(mymodule_exit);
MODULE_LICENSE("GPL");
于 2021-07-16T11:00:19.273 回答