· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

关于Linux操作系统内核中的指针和错误值

发布时间:2008.06.10 05:28     来源:赛迪网    作者:sixth

在内核的代码和驱动程序中经常见到ERR_PTR, IS_ERR, PTR_ERR这三个内联函数。

许多的内核函数需要返回一个指针,但是函数的调用可能失败,一般我们处理这样的情形都是返回一个NULL指针,就像malloc或kmalloc在没有获得指定的空间申请时的返回值一样。但是有时我们想知道导致函数失败的原因,但是返回NULL就显得信息不够。因此有些函数返回一个实际的错误编码以便对引起错误的原因做一些处理。很多内核接口通过把错误值编码到一个指针值中来返回错误信息。当处理这样的函数时,判断是否成功调用就不能是简单的和NULL进行比较。为了方便使用这样的类型接口,2.6的内核在linux/err.h中实现了三个内联函数:

inline void *ERR_PTR(long error)
{
return (void *) error;
}

返回指针类型的函数可以通过这个函数来返回一个错误值。这里的error是通常的负的错误编码。调用者可以使用IS_ERR来检查所返回的指针是否是一个错误编码。

inline long IS_ERR(const void *ptr)
{
return (unsigned long)ptr > (unsigned long)-1000L;
}

如果需要实际的错误编码,可以通过PTR_ERR函数提取

inline long PTR_ERR(const void *ptr)
{
return (long) ptr;
}

只有在IS_ERR返回真的时候才能使用PTR_ERR。

(责任编辑:云子)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 最简单的解决Linux下Openoffice乱码方法 (06-06) · Google公司首次发布Linux版Google小工具 (06-06)
· 四步轻松搞定Ubuntu Linux下WPA无线上网 (06-05) · VirtualBox为Ubuntu系统配置共享文件夹 (06-05)
· Ubuntu Linux下single模式无需密码方法 (06-05) · 在Ubuntu Linux下安装WebEx播放wrf文件 (06-05)
· Ubuntu 8.04系统中增加Windows中文字体 (06-05) · Ubuntu Linux系统下声卡独占的解决方法 (06-05)
· Linux下安装Realplayer不能播放启动问题 (06-05) · 关于Linux和Windows文件路径的解决办法 (06-05)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:扭亏为盈 联想09年Q2翻番
·专题:Tech·Ed 2009微..
·直播:2009互联网大会..
·迅雷搜狐"互搏" 谁动了..
专题:诺基亚危局已现 或重蹈摩托覆辙
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
·专题:排排坐开商店 三..
商务演示需求分析 多媒体会议室必备投影
·VMware在京隆重举行2009..
·专题:笔记本频道10月热..
·专题:学生机市场 惠普 ..
专题:Tech.Ed 2009微软技术大会
·专题:2009 SYBASE 亚太..
·专题:微软新一代桌面操..
·专题:2009年第3届CSDN..