2010-03-26 75 views
0

我正在VxWorks PPC上運行我的代碼,並且尤其是對於套接字發送/ recv函數,系統調用失敗,errno始終返回0。errno始終在VxWorks PPC中返回零

經過一番分析,我發現errno在所有系統調用失敗時都返回0。

是否有任何初始化,我應該爲errno做返回正確的值?

+0

您是否包含''''並且不寫'extern int errno;''?您是否從系統調用中收到錯誤指示? errno變量永遠不會被庫清零,但僅在系統調用返回錯誤指示時才相關。 – 2010-03-26 15:38:48

+0

是的。我包括,不包括'extern int errno'。有關係嗎?我的代碼編譯和鏈接很好。我的系統調用肯定是返回錯誤指示。 – Jay 2010-03-26 15:48:10

+0

errno並不是真正的'extern int errno;'。這不會允許多個線程,因爲它們必須共享一個errno,並且您永遠不會知道該值真的屬於哪個線程。這是一個擴展到訪問線程本地版本的代碼的宏,所以它應該很重要。 – nategoose 2010-03-26 15:56:25

回答

1

從shell(內核或主機)中,如果輸入'i'命令,您將獲得任務列表。其中一個領域是errno值。找出發生錯誤的任務,並設置錯誤值。

當檢查錯誤號,你必須要在同一個任務導致錯誤:

if(ERROR = someSystemFunction()) 
    printf("errno=%x", errno); 

你不能在外殼和期望打印錯誤號

-> errno  (<---- will NEVER work) 
errno:0x123455 value: 0 = 0x0 
0

errnoGet( )會返回給你執行它的任務的錯誤號。 請參閱errnoLib文檔以獲取不同任務的errno

相關問題