使用错误返回等与err相关的定义与操作,需包含头文件:
- #include <linux/err.h>
常见的err说明
include/asm-generic/errno-base.h- #define EPERM 1 /* Operation not permitted */
- #define ENOENT 2 /* No such file or directory */
- #define ESRCH 3 /* No such process */
- #define EINTR 4 /* Interrupted system call */
- #define EIO 5 /* I/O error */
- #define ENXIO 6 /* No such device or address */
- #define E2BIG 7 /* Argument list too long */
- #define ENOEXEC 8 /* Exec format error */
- #define EBADF 9 /* Bad file number */
- #define ECHILD 10 /* No child processes */
- #define EAGAIN 11 /* Try again */
- #define ENOMEM 12 /* Out of memory */
- #define EACCES 13 /* Permission denied */
- #define EFAULT 14 /* Bad address */
- #define ENOTBLK 15 /* Block device required */
- #define EBUSY 16 /* Device or resource busy */
- #define EEXIST 17 /* File exists */
- #define EXDEV 18 /* Cross-device link */
- #define ENODEV 19 /* No such device */
- #define ENOTDIR 20 /* Not a directory */
- #define EISDIR 21 /* Is a directory */
- #define EINVAL 22 /* Invalid argument */
- #define ENFILE 23 /* File table overflow */
- #define EMFILE 24 /* Too many open files */
- #define ENOTTY 25 /* Not a typewriter */
- #define ETXTBSY 26 /* Text file busy */
- #define EFBIG 27 /* File too large */
- #define ENOSPC 28 /* No space left on device */
- #define ESPIPE 29 /* Illegal seek */
- #define EROFS 30 /* Read-only file system */
- #define EMLINK 31 /* Too many links */
- #define EPIPE 32 /* Broken pipe */
- #define EDOM 33 /* Math argument out of domain of func */
- #define ERANGE 34 /* Math result not representable */
下面是出错相关的几个宏:
ERR_PTR()将错误码转换成指针。
include/linux/err.h
- static inline void * __must_check ERR_PTR(long error)
- {
- return (void *) error;
- }
include/linux/err.h
- static inline long __must_check PTR_ERR(const void *ptr)
- {
- return (long) ptr;
- }
IS_ERR()判断指针是否落在错误码区域。
include/linux/err.h
- static inline long __must_check IS_ERR(const void *ptr)
- {
- return IS_ERR_VALUE((unsigned long)ptr);
- }
- #define MAX_ERRNO 4095
- #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
IS_ERR_OR_NULL()判断指针是否落在错误码区域或者为空。
include/linux/err.h
- static inline long __must_check IS_ERR_OR_NULL(const void *ptr)
- {
- return !ptr || IS_ERR_VALUE((unsigned long)ptr);
- }
IS_ERR()判断的是指针是否指向错误码区域,ptr==NULL或!ptr判断的是指针是否为空,这几个判断一般用在当调用的函数的返回值为指针类型。对于IS_ERR()与ptr==NULL的使用区别,则具体要看调用的是什么函数,如果函数在调用失败时返回NULL指针,那么就应该使用ptr==NULL或者!ptr。如果函数在调用失败时返回的是指向错误码区的指向,那么就要使用IS_ERR()或者IS_ERR_VALUE()。当然也可以使用IS_ERR_OR_NULL来判断所有的返回为指针的调用。