|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果你让他去用linux搭建一个web服务器,做一个linux网关,他就什么都不会了.他们把时间都浪费在了版本的转换上了.
在内核的代码和驱动程序中常常见到ERR_PTR,IS_ERR,PTR_ERR这三个内联函数。
很多的内核函数必要前往一个指针,可是函数的挪用大概失利,一样平常我们处置如许的情况都是前往一个NULL指针,就像malloc或kmalloc在没有取得指定的空间请求时的前往值一样。可是偶然我们想晓得招致函数失利的缘故原由,可是前往NULL就显得信息不敷。因而有些函数前往一个实践的毛病编码以便对引发毛病的缘故原由做一些处置。良多内核接口经由过程把毛病值编码到一个指针值中来前往毛病信息。当处置如许的函数时,判别是不是乐成挪用就不克不及是复杂的和NULL举行对照。为了便利利用如许的范例接口,2.6的内核在linux/err.h中完成了三个内联函数:
inlinevoid*ERR_PTR(longerror)
{
return(void*)error;
}
前往指针范例的函数能够经由过程这个函数来前往一个毛病值。这里的error是一般的负的毛病编码。挪用者可使用IS_ERR来反省所前往的指针是不是是一个毛病编码。
inlinelongIS_ERR(constvoid*ptr)
{
return(unsignedlong)ptr>(unsignedlong)-1000L;
}
假如必要实践的毛病编码,能够经由过程PTR_ERR函数提取
inlinelongPTR_ERR(constvoid*ptr)
{
return(long)ptr;
}
只要在IS_ERR前往真的时分才干利用PTR_ERR
</p>
使用gcc或g++进行编译,使用gdb进行调试; |
|