作者koukai (成大资工欢迎你!)
看板LinuxDev
标题Re: [问题] 请问apue的第14页有关define的问题 @@
时间Tue Dec 2 09:50:58 2008
※ 引述《king19880326 (OK的啦~我都可以接受)》之铭言:
: 小弟在阅读apue(advanced programming in the unix environment 2e)
: 时看到下面两行:
: extern int *__errno_location(void);
: #define errno (*__errno_location());
: 书上说是与thread的errno有关
: 我想请问这两行的意思到底是??
: 感谢感谢 <(__)>
: ps. errno 是在 <errno.h>里
欸~我不知道linux跟unix这边实做有没有一样,就我所知解释一下
errno是用来储存某些glibc函式的回传错误码
那些函式正确无误返回时,通常回传0,
有问题发生回传1,并且修改errno的值
因此,caller可以藉由errno得知,该函式到底发生了什麽问题?
在使用上,你应该将他当作一个唯读的变数,所以当你使用到errno时
if(errno == EACCESS)
do_something();
会被代换成
if((*__errno_location()) == EACCESS)
do_something();
__errno_location()就是用来实做取得errno的函式,
可能基於某些理由,让他用函式实做吧~
看起来,他也可以当lvalue?
另外(Linux中)在多执行绪上,每个执行绪有自己的errno
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.224
1F:推 king19880326:这是我疑惑的地方@@>,因为thread应该是共用记忆体,那 12/02 14:08
2F:→ king19880326:为甚麽改用function後,每个thread就有自己的errno?? 12/02 14:09
3F:→ king19880326:感谢感谢 12/02 14:09