retval=PTR_ERR(dir_page);if(IS_ERR(dir_page))gotoout1; ... } getname()返回有可能是一个分配的页面的首地址,也有可能因为内存不足返回ERR_PTR(-ENOMEM);先看返回是页面首地址的情况,接着 通过PTR_ERR()将这个指针类型的地址转化成为一个整型,再通过IS_ERR()来判断是否是一个有效的页面首地址,这跟...
ERR_PTR,PTR_ERR还有IS_ERR函数详解,内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来。总体来说,如果内核返回一个指针,那么有三种情况:合法指针,NULL指针和非法指针。1)合法指针:内核返回的指针一般是指向页面的边界(4K边界),即ptr&0x
解读PTR_ERR,ERR_PTR,IS_ERR 看到了几个宏PTR_ERR,ERR_PTR,IS_ERR(其实是内联函数).还是不太明白,然后就google搜索了一下,搜出来的结果真是不让人满意,看完一些解释我更迷糊了。看来还得依靠内核源码,依靠对内核的理解自己弄明白了。大致看了一下这几个宏的定义
#defineIS_ERR_VALUE(x)unlikely((x)>=(unsigned long)-MAX_ERRNO)staticinlinevoid*__must_checkERR_PTR(long error){return(void*)error;}staticinline long __must_checkPTR_ERR(constvoid*ptr){return(long)ptr;}staticinline long __must_checkIS_ERR(constvoid*ptr){returnIS_ERR_VALUE((unsigned lon...
union err_t { int i; long l; unsigned int ui; unsigned long ul; void *p; char ch[sizeof(unsigned long)]; }; static void test(long val) { union err_t err; memcpy(&err, &val, sizeof(val)); printf("int: %d\n", err.i); ...
IS_ERR、PTR_ERR、ERR_PTR,最近在使用filp_open打开文件时遇到到一个问题,当打开一个并不存在的文件时,filp_open返回值值为0xfffffffe,而并不是0(NULL),这是因为内核对返回指针的函数做了特殊处理。内核中的函数常常返回指针,通常如果调用出错,会返回NULL空指针,
Linux内核IS_ERR/ERR_PTR/PTR_ERR,代码先锋网,一个为软件开发程序员提供代码片段和技术文章聚合的网站。
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),这里问什么是大于简单说一下,以为错误码在返回的时候都去...
Linux的errno和指针:Linux函数返回值类型包括整型和指针。内核中,整型用于errno,指针分为三种:空指针NULL(地址为0),异常指针(地址空间高4095个字节,32位为0xfffff001-0xffffffff,64位为0xfffffffffffff001-0xffffffffffffffff),以及普通指针。errno最大值MAX_ERRNO在err.h定义,为4095。变量...
IS_ERR、PTR_ERR、ERR_PTR 2015-04-10 14:33 −最近在使用filp_open打开文件时遇到到一个问题,当打开一个并不存在的文件时,filp_open返回值值为0xfffffffe,而并不是0(NULL),这是因为内核对返回指针的函数做了特殊处理。内核中的函数常常返回指针,通常如果调用出错,会返回NULL空指针,但linux做了更精妙的处...