谁知IS_ERR()的涵义?

hb0zyj3540 2011-10-08 10:47:07
现有如下代码:
#define MAX_ERRNO 4095
#define IS_ERR_VALUE(x) unlikely(x)>=(unsigned long)-MAX_ERRNO
static inline long IS_ERR(const void *ptr)
{
return IS_ERR_VALUE(unsigned long)ptr);
}
书上说,内核最后一个PAGE是4K的,所以定义MAX_ERRNO=4095,那
unsigned long是多少?什么涵义?
...全文
165 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hb0zyj3540 2011-10-08
  • 打赏
  • 举报
回复
负的4095转成unsigned long类型是多少呢?什么涵义呢?
nevil 2011-10-08
  • 打赏
  • 举报
回复
(unsigned long)-MAX_ERRNO这句是把负的4095转成unsigned long类型

这样就比较好理解了。
hb0zyj3540 2011-10-08
  • 打赏
  • 举报
回复
sorry,下面这句差个括号:
#define IS_ERR_VALUE(x) unlikely((x)>=(unsigned long)-MAX_ERRNO)
念茜 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nevil 的回复:]
负的4095转成unsigned long类型相当于2的32次方-4095(如果unsigned long是32位)
就是说你的指针地址不能大于 2的32次方-4095,相当于不能指向32位地址空间的地址最高的最后一个page.
[/Quote]
unsigned long在这是个类型转换,(unsigned long)-4095这样直接在第31位上写1
nevil 2011-10-08
  • 打赏
  • 举报
回复
负的4095转成unsigned long类型相当于2的32次方-4095(如果unsigned long是32位)
就是说你的指针地址不能大于 2的32次方-4095,相当于不能指向32位地址空间的地址最高的最后一个page.

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧