retval=PTR_ERR(dir_page);if(IS_ERR(dir_page))gotoout1; ... } getname()返回有可能是一个分配的页面的首地址,也有可能因为内存不足返回ERR_PTR(-ENOMEM);先看返回是页面首地址的情况,接着 通过PTR_ERR()将这个指针类型的地址转化成为一个整型,再通过IS_ERR()来判断是否是一个有效的页面首地址,这跟...
#defineMAX_ERRNO 4095#ifndef__ASSEMBLY__#defineIS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)staticinlinevoid*ERR_PTR(longerror){return(void*) error; }staticinlinelongPTR_ERR(constvoid*ptr){return(long) ptr; }staticinlinelongIS_ERR(constvoid*ptr){returnIS_ERR_VALUE((unsigne...
表示filp_open函数失败,IS_ERR为1,同时filp_open返回的错误地址对应一个linux的错误号, 如果想知道是哪个错误号,就用PTR_ERR函数来转化。 错误的返回地址和错误号是可以使用 ERR_PTR、PTR_ERR 相互转化的。
1)合法指针:内核返回的指针一般是指向页面的边界(4K边界),即ptr & 0xfff == 0 2)非法指针:这样ptr的值不可能落在(0xfffff000,0xffffffff)之间(这个区间是内核高端内存所在的区间,关于用户空间和内核空间,可以看考这里。), 而一般内核的出错代码也是一个小负数,在-1000到0之间,转变成unsigned long,正好在(0x...
static inline void *ERR_PTR(long error) { return (void *) error; } /* 将指针转化为错误号 */ static inline long PTR_ERR(const void *ptr) { return (long) ptr; } /* 判断返回的指针是错误信息还是实际地址,即指针是否落在最后一页 ...
几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR,程序员大本营,技术文章内容聚合第一站。
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);...
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),这里问什么是大于简单说一下,以为错误码在返回的时候都去...
IS_ERR()就是判断指针是否有错,如果指针并不是指向最后一个page,那么没有问题;如果指针指向了最后一个page,那么说明实际上这不是一个有效的指针,这个指针里保存的实际上是一种错误代码。而通常很常用的方法就是先用IS_ERR()来判断是否是错误,然后如果是,那么就调用PTR_ERR()来返回这个错误代码。因此,判断一个...
第三个参数创建文件时使用,设置创建文件的读写权限,其它情况可以设为0 该函数返回strcut file*结构指针,供后继函数操作使用,该返回值用IS_ERR()来检验其有效性。...#ifndef _LINUX_ERR_H #define _LINUX_ERR_H #include linux/compiler.h> ...