作者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
推 king19880326:這是我疑惑的地方@@>,因為thread應該是共用記憶體,那 12/02 14:08
→ king19880326:為甚麼改用function後,每個thread就有自己的errno?? 12/02 14:09
→ king19880326:感謝感謝 12/02 14:09