linux中對EINTR錯誤的處理

2022-04-27 11:24:11 字數 474 閱讀 1087

eintr錯誤的產生:當阻塞於某個慢系統呼叫的乙個程序捕獲某個訊號且相應訊號處理函式返回時,該系統呼叫可能返回乙個eintr錯誤。例如:在socket伺服器端,設定了訊號捕獲機制,有子程序,當在父程序阻塞於慢系統呼叫時由父程序捕獲到了乙個有效訊號時,核心會致使accept返回乙個eintr錯誤(被中斷的系統呼叫)。

當碰到eintr錯誤的時候,可以採取有一些可以重啟的系統呼叫要進行重啟,而對於有一些系統呼叫是不能夠重啟的。

例如:accept、read、write、select、和open之類的函式來說,是可以進行重啟的,accept函式出錯為interrupted system call

不過對於套接字程式設計中的connect函式我們是不能重啟的,若connect函式返回乙個eintr錯誤的時候,我們不能再次呼叫它,否則將立即返回乙個錯誤。針對connect不能重啟的處理方法是,必須呼叫select來等待連線完成。

對EINTR的處理

呼叫系統呼叫的時候,有時系統呼叫會被中斷.此時,系統呼叫會返回 1,並且錯誤碼被置為eintr.但是,有時並不將這樣的情況作為錯誤.有兩種處理方法 1.如果錯誤碼為eintr則重新呼叫系統呼叫,例如postgresql中有一段 cpp view plain copy print?retry1 if ...

MATLAB 中對 Python 錯誤進行故障排除

使用 matlab 外部介面對錯誤進行故障排除比較困難,因為不確定錯誤是在 python 應用程式中還是在 matlab 中,常見錯誤有 python報告的錯誤,試圖將 python 資料轉換為 matlab 資料時的錯誤,以及試圖將 matlab 資料轉換為 python 資料的錯誤。python...

linux中對spin lock的實現

spinlock在linux中的實現 linux 3.8為原始碼樣本 一 uniprocessor smp 中spinlock實現概述 spinlock在uniprocessor中的實現比較簡單,因為對於程序排程,單cpu不存在多個程序同時處於執行狀態,並且同時對某塊共享資料進行訪問這樣一種可能性。...