Re: [問題] 請問apue的第14頁有關define的問題 @@
※ 引述《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
推
12/02 14:08, , 1F
12/02 14:08, 1F
→
12/02 14:09, , 2F
12/02 14:09, 2F
→
12/02 14:09, , 3F
12/02 14:09, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章