void*ERR_PTR(longerror);longIS_ERR(constvoid*ptr);longPTR_ERR(constvoid*ptr); 第一个函数实际上把错误值作为指针返回。假若函数在内存申请失败后要执行语句return -ENOMEM;,则必须改为这样的语句:return ERR_PTR(-ENOMEM);。 第二个函数用于检查返回值是否是指针错误:if (IS_ERR(foo))。最后一个函数返...
Linux内核IS_ERR/ERR_PTR/PTR_ERR 对于一个指针,一般分为3类:1、有效指针;2、NULL;3、非法指针 IS_ERR/ERR_PTR/PTR_ERR均定义在include/linux/err.h文件中。 1、IS_ERR static inline bool __must_check IS_ERR(__force const void *ptr) { return IS_ERR_VALUE((unsigned long)ptr); } 1 2 ...
表示filp_open函数失败,IS_ERR为1,同时filp_open返回的错误地址对应一个linux的错误号, 如果想知道是哪个错误号,就用PTR_ERR函数来转化。 错误的返回地址和错误号是可以使用 ERR_PTR、PTR_ERR 相互转化的。
比如说我们上面的filp_open函数返回值,用IS_ERR函数去检查,如果地址落在0xfffffffffffff000~0xffffffffffffffff范围,表示filp_open函数失败,IS_ERR为1,同时filp_open返回的错误地址对应一个linux的错误号,如果想知道是哪个错误号,就用PTR_ERR函数来转化。错误的返回地址和错误号是可以根据截图中的ERR_PTR、PTR_ERR...
retval=PTR_ERR(dir_page);if(IS_ERR(dir_page))gotoout1; ... } getname()返回有可能是一个分配的页面的首地址,也有可能因为内存不足返回ERR_PTR(-ENOMEM);先看返回是页面首地址的情况,接着 通过PTR_ERR()将这个指针类型的地址转化成为一个整型,再通过IS_ERR()来判断是否是一个有效的页面首地址,这跟...
几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR,程序员大本营,技术文章内容聚合第一站。
static inline void *ERR_PTR(long error) { return (void *) error; } /* 将指针转化为错误号 */ static inline long PTR_ERR(const void *ptr) { return (long) ptr; } /* 判断返回的指针是错误信息还是实际地址,即指针是否落在最后一页 ...
error){return(void*)error;}staticinlinelong__must_checkPTR_ERR(constvoid*ptr){return(long)ptr;}staticinlinelong__must_checkIS_ERR(constvoid*ptr){returnIS_ERR_VALUE((unsignedlong)ptr);}staticinlinelong__must_checkIS_ERR_OR_NULL(constvoid*ptr){return!ptr||IS_ERR_VALUE((unsignedlong)ptr);...
本文介绍Linux 4.4内核IS_ERR()函数。 文件:include/linux/err.h,定义如下: 一、功能 功能:判断传入的指针ptr是否有效。 Linux内核...
static inline long PTR_ERR(const void *ptr) { return (long) ptr; } static inline long IS_ERR(const void *ptr) { return IS_ERR_VALUE((unsigned long)ptr); } 判断是否为错误指针也是很简单unlikely((x) >= (unsigned long)-MAX_ERRNO),这里问什么是大于简单说一下,以为错误码在返回的时候都去...