我正在VxWorks PPC上運行我的代碼,並且尤其是對於套接字發送/ recv函數,系統調用失敗,errno始終返回0。errno始終在VxWorks PPC中返回零
經過一番分析,我發現errno在所有系統調用失敗時都返回0。
是否有任何初始化,我應該爲errno做返回正確的值?
我正在VxWorks PPC上運行我的代碼,並且尤其是對於套接字發送/ recv函數,系統調用失敗,errno始終返回0。errno始終在VxWorks PPC中返回零
經過一番分析,我發現errno在所有系統調用失敗時都返回0。
是否有任何初始化,我應該爲errno做返回正確的值?
從shell(內核或主機)中,如果輸入'i'命令,您將獲得任務列表。其中一個領域是errno值。找出發生錯誤的任務,並設置錯誤值。
當檢查錯誤號,你必須要在同一個任務導致錯誤:
if(ERROR = someSystemFunction())
printf("errno=%x", errno);
你不能在外殼和期望打印錯誤號
-> errno (<---- will NEVER work)
errno:0x123455 value: 0 = 0x0
errnoGet( )會返回給你執行它的任務的錯誤號。 請參閱errnoLib文檔以獲取不同任務的errno
您是否包含''''並且不寫'extern int errno;''?您是否從系統調用中收到錯誤指示? errno變量永遠不會被庫清零,但僅在系統調用返回錯誤指示時才相關。 –
2010-03-26 15:38:48
是的。我包括,不包括'extern int errno'。有關係嗎?我的代碼編譯和鏈接很好。我的系統調用肯定是返回錯誤指示。 –
Jay
2010-03-26 15:48:10
errno並不是真正的'extern int errno;'。這不會允許多個線程,因爲它們必須共享一個errno,並且您永遠不會知道該值真的屬於哪個線程。這是一個擴展到訪問線程本地版本的代碼的宏,所以它應該很重要。 – nategoose 2010-03-26 15:56:25