当前位置: 首页 > wzjs >正文

深圳金融投资网站建设设计类专业专科学校

深圳金融投资网站建设,设计类专业专科学校,免费logo网站,网站开发公司比较有名在阅读和编写内核相关的代码时,经常会看到IS_ERR、ERR_PTR等函数。这些函数在内核头文件的err.h中。以我服务器的代码为例,内核版本为5.15。 这个文件的代码如下: /* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_ERR_H #define _L…

在阅读和编写内核相关的代码时,经常会看到IS_ERR、ERR_PTR等函数。这些函数在内核头文件的err.h中。以我服务器的代码为例,内核版本为5.15。
在这里插入图片描述
这个文件的代码如下:

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_ERR_H
#define _LINUX_ERR_H#include <linux/compiler.h>
#include <linux/types.h>#include <asm/errno.h>/** Kernel pointers have redundant information, so we can use a* scheme where we can return either an error code or a normal* pointer with the same return value.** This should be a per-architecture thing, to allow different* error and pointer decisions.*/
#define MAX_ERRNO	4095#ifndef __ASSEMBLY__#define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)static inline void * __must_check ERR_PTR(long error)
{return (void *) error;
}static inline long __must_check PTR_ERR(__force const void *ptr)
{return (long) ptr;
}static inline bool __must_check IS_ERR(__force const void *ptr)
{return IS_ERR_VALUE((unsigned long)ptr);
}static inline bool __must_check IS_ERR_OR_NULL(__force const void *ptr)
{return unlikely(!ptr) || IS_ERR_VALUE((unsigned long)ptr);
}/*** ERR_CAST - Explicitly cast an error-valued pointer to another pointer type* @ptr: The pointer to cast.** Explicitly cast an error-valued pointer to another pointer type in such a* way as to make it clear that's what's going on.*/
static inline void * __must_check ERR_CAST(__force const void *ptr)
{/* cast away the const */return (void *) ptr;
}static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr)
{if (IS_ERR(ptr))return PTR_ERR(ptr);elsereturn 0;
}#endif#endif /* _LINUX_ERR_H */

这个文件提供了一套用于处理错误指针的宏和函数。主要部分的解释:

#define MAX_ERRNO 4095:定义了最大的错误号为4095。

#define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO):定义了一个宏,用于检查一个值是否在错误号的范围内。

ERR_PTR(long error):这个函数将一个错误号转换为一个错误指针,这样就可以将错误信息通过指针返回。

PTR_ERR(const void *ptr):这个函数将一个错误指针转换回对应的错误号。

IS_ERR(const void *ptr):这个函数检查一个指针是否是错误指针。

IS_ERR_OR_NULL(const void *ptr):这个函数检查一个指针是否是错误指针或者NULL指针。

ERR_CAST(const void *ptr):这个函数将一个错误指针强制转换为另一种类型的指针。

PTR_ERR_OR_ZERO(const void *ptr):这个函数检查一个指针,如果它是错误指针,就返回对应的错误号,否则返回0。

这些函数和宏提供了一种机制,使得函数可以通过返回指针的方式来返回错误信息。

错误号的部分信息在文件errno.h中
代码如下:

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_ERRNO_H
#define _LINUX_ERRNO_H#include <uapi/linux/errno.h>/** These should never be seen by user programs.  To return one of ERESTART** codes, signal_pending() MUST be set.  Note that ptrace can observe these* at syscall exit tracing, but they will never be left for the debugged user* process to see.*/
#define ERESTARTSYS	512
#define ERESTARTNOINTR	513
#define ERESTARTNOHAND	514	/* restart if no handler.. */
#define ENOIOCTLCMD	515	/* No ioctl command */
#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */
#define EPROBE_DEFER	517	/* Driver requests probe retry */
#define EOPENSTALE	518	/* open found a stale dentry */
#define ENOPARAM	519	/* Parameter not supported *//* Defined for the NFSv3 protocol */
#define EBADHANDLE	521	/* Illegal NFS file handle */
#define ENOTSYNC	522	/* Update synchronization mismatch */
#define EBADCOOKIE	523	/* Cookie is stale */
#define ENOTSUPP	524	/* Operation is not supported */
#define ETOOSMALL	525	/* Buffer or request is too small */
#define ESERVERFAULT	526	/* An untranslatable error occurred */
#define EBADTYPE	527	/* Type not supported by server */
#define EJUKEBOX	528	/* Request initiated, but will not complete before timeout */
#define EIOCBQUEUED	529	/* iocb queued, will get completion event */
#define ERECALLCONFLICT	530	/* conflict with recalled state */
#define ENOGRACE	531	/* NFS file lock reclaim refused */#endif

错误号的部分解释如下

ERESTARTSYS (512):系统调用由于接收到一个可以被处理的信号而被中断,需要被重新启动。

ERESTARTNOINTR (513):系统调用由于某些原因被中断,需要被重新启动,但是不需要检查未决的信号。

ERESTARTNOHAND (514):系统调用由于接收到一个不能被当前进程处理的信号而被中断,需要被重新启动。

ENOIOCTLCMD (515):没有找到对应的ioctl命令。

ERESTART_RESTARTBLOCK (516):系统调用需要被重新启动,但是使用了不同的方法。

EPROBE_DEFER (517):设备驱动程序请求延迟探测。

EOPENSTALE (518):打开操作找到了一个过时的目录项。

ENOPARAM (519):不支持的参数。

EBADHANDLE (521):NFS协议中的非法文件句柄。

ENOTSYNC (522):更新同步不匹配。

EBADCOOKIE (523):Cookie过期。

ENOTSUPP (524):不支持的操作。

ETOOSMALL (525):缓冲区或请求太小。

ESERVERFAULT (526):发生了无法翻译的错误。

EBADTYPE (527):服务器不支持的类型。

EJUKEBOX (528):请求已经启动,但在超时前不会完成。

EIOCBQUEUED (529):iocb已经入队,将会收到完成事件。

ERECALLCONFLICT (530):与被召回的状态冲突。

ENOGRACE (531):NFS文件锁恢复被拒绝。


文章转载自:

http://lt14t92n.qwrqg.cn
http://t3Mpr5To.qwrqg.cn
http://2CRAHOai.qwrqg.cn
http://ZMq8OUqp.qwrqg.cn
http://ETqj5Gcf.qwrqg.cn
http://oQIAxFti.qwrqg.cn
http://Jw22K0qS.qwrqg.cn
http://vMC1MZ29.qwrqg.cn
http://Mt8qejPx.qwrqg.cn
http://YiIZrkFt.qwrqg.cn
http://RwZikghL.qwrqg.cn
http://2a57ZeBm.qwrqg.cn
http://CGVytqM1.qwrqg.cn
http://e2JLbzvw.qwrqg.cn
http://DEVC5jrL.qwrqg.cn
http://pJHXD9vM.qwrqg.cn
http://BtZOWhr4.qwrqg.cn
http://d9plxipD.qwrqg.cn
http://60bSJEjH.qwrqg.cn
http://y2cwLfSd.qwrqg.cn
http://ijbD1cBZ.qwrqg.cn
http://0phmSnMa.qwrqg.cn
http://yxgd5PLW.qwrqg.cn
http://UAXJxvH4.qwrqg.cn
http://PEvhDh9k.qwrqg.cn
http://zudI8IRD.qwrqg.cn
http://vSYR7kZw.qwrqg.cn
http://5oDduJFG.qwrqg.cn
http://CId9Kx2P.qwrqg.cn
http://8SAFOp2m.qwrqg.cn
http://www.dtcms.com/wzjs/646099.html

相关文章:

  • 网站网页设计要求网站代码优化调整
  • 建立企业网站公司正邦设计的logo
  • 网站开发注意问题室内设计平面图尺寸
  • 杭州专业网站制作做菠菜网站
  • 婚纱摄影团购网站模板西安自由行攻略5天详细
  • 俄文网站建设方案网站开发的实例教程
  • 提供深圳网站制作公司网络编程培训
  • 网站设置了自动登录怎么显示密码电商就业前景
  • 邓州网站建设网站首页logo怎么修改
  • 如何做网站卖衣服下载jsp网站开发用啥工具
  • 商城网站哪个公司做的好处微商怎么做推广
  • 网站开发软件技术专业好吗域名是什么 有什么用
  • 顺企网江西网站建设网站建设项目申报书
  • 铺面怎样做放上网站nas wordpress外网访问
  • 做美食网站的意义晋江论坛兔区是什么
  • 南宁网站制作网络公司wordpress好用的空间
  • 阳光保险网站世界500强企业最新排名表
  • 非凡软件站企业网站html5
  • 怎么做买东西的网站深圳还有网站
  • 广东网站开发wordpress悬浮播放器
  • 广东品牌网站建设公司网站程序定制开发流程
  • 教育培训网站建设方案模板模板做图 网站有哪些内容
  • 新乡市封丘县建设局网站网站开发用哪个软件
  • 怎么自己购买域名 建设网站小程序定制开发中软
  • 网站的成功案例一元购物网站建设
  • 做淘宝团购的网站网站展示型和营销型有什么区别
  • 网站开发定位wordpress指针美化
  • 宁波seo整站优化网线水晶头制作过程
  • 网站建设后台管理实训报告扁平化网站psd
  • 实力网站建设电话产品推销文案