ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxÄÚºËÖеÄÖ¸ÕëºÍ´íÎóÖµ

·¢²¼Ê±¼ä:2008-06-06 01:07:08À´Ô´:ºìÁª×÷Õß:Dssiuet
ÔÚÄں˵ĴúÂëºÍÇý¶¯³ÌÐòÖо­³£¼ûµ½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¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ