Re: [問題] 請問apue的第14頁有關define的問題 @@

看板LinuxDev作者 (成大資工歡迎你!)時間16年前 (2008/12/02 09:50), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
這是我疑惑的地方@@>,因為thread應該是共用記憶體,那
12/02 14:08, 1F

12/02 14:09, , 2F
為甚麼改用function後,每個thread就有自己的errno??
12/02 14:09, 2F

12/02 14:09, , 3F
感謝感謝
12/02 14:09, 3F
文章代碼(AID): #19D9I3U3 (LinuxDev)
文章代碼(AID): #19D9I3U3 (LinuxDev)