内核中是否存在perror的等价物?

时间:2012-04-04 06:38:24

标签: c module linux-kernel kernel

perror()在内核中会是什么?我不知道错误代码的错误代码是什么,即单独的-22。

2 个答案:

答案 0 :(得分:2)

Linux内核只使用否定的errno代码作为约定。请查看asm-generic/errno-base.hasm-generic/errno.h并找到...

#define EINVAL          22      /* Invalid argument */

例如,如果您将NULL传递给不接受NULL的函数,就会发生这种情况。这取决于功能。

答案 1 :(得分:0)

我知道这个问题很老,但我遇到了它,我找到了一个比接受的答案更令人满意的解决方法。

确实没有实际的 perror 但错误可以以更好的方式打印 (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");