對EINTR的處理

2021-06-21 05:45:59 字數 346 閱讀 7782

呼叫系統呼叫的時候,有時系統呼叫會被中斷.此時,系統呼叫會返回-1,並且錯誤碼被置為eintr.但是,有時並不將這樣的情況作為錯誤.有兩種處理方法:

1.如果錯誤碼為eintr則重新呼叫系統呼叫,例如postgresql中有一段**:

[cpp]view plain

copy

print?

retry1: 

if (send(port->sock, &sslok, 1, 0) != 1) 

while ((re == -1) && (errno == eintr)); 

return re; 

linux中對EINTR錯誤的處理

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

對矩陣的處理

include int main i,j printf 請輸入10個整數 n for i 0 i 5 i for j 2 j 4 j scanf d a i j for i 0 i 5 i printf 現在將所有元素乘以3倍.完成!n printf 行序優先輸出 n for i 0 i 5 i f...

對大數的處理

問題 輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到999。解題思路 首先注意n沒有規定範圍,意味著n可以輸入很大的值,那麼這種情況下,無論時用整型還是長整型都會溢位。所以需要考慮大數問題。可以通過字串來解決大數問題。因為數字最大是n位的,需要用乙個n 1長...