慢系統呼叫

2021-05-26 12:16:33 字數 492 閱讀 9312

對於那些可能永遠阻塞的函式,我們可以稱之為慢系統呼叫,多數網路支援的函式都屬於這一類,如上列的這些函式,比如沒有客戶連線到伺服器,那麼伺服器對與accept的返回沒***。

應用在這的乙個規則是,當一程序阻塞於乙個慢系統呼叫,可能捕獲到乙個訊號,等待訊號處理程式返回時,系統呼叫可能返回乙個-eintr錯誤。有些核心可能重啟系統呼叫。但是我們便於移植。當我們編寫訊號處理程式時,必須得處理-eintr錯誤的情況。於是拿accept系統呼叫來說。我們將對其的呼叫改為:

for( ; ;){

len = sizeof(cliaddr);

if((connfd = accept(listfd, (struct sockaddr *)&cliaddr, &len)) < 0){

if(errno == eintr)

continue;

else

err_quit("accept error\n");

這段**是我們自己處理重啟慢系統呼叫的情況。

慢系統呼叫 和EINTR錯誤

本文引用了 訊號中斷 與 慢系統呼叫 中的內容,感謝許老師的精彩分享。所謂慢系統呼叫 slow system call 指的是那些可能永遠阻塞的系統呼叫,永遠阻塞的意思是指呼叫有可能永遠無法返回,多數網路支援函式都屬於這一類,比如socket程式設計中的 accept 函式 如果沒有客戶連線到伺服器...

read系統呼叫,mmap系統呼叫

read系統呼叫,mmap系統呼叫 2012 07 23 09 54 28 分類 linux 標籤 linux 檔案系統 虛擬記憶體 儲存系統 字型大小 訂閱 一般情況下,操作檔案既可以使用標準i o,也可直接使用系統呼叫。兩者有何區別呢?在輸入輸出中,直接使用底層的系統呼叫效率是非常低的,為什麼?...

庫呼叫,系統呼叫

通過這個問題,可以判斷候選人是否具有豐富的程式設計經驗以及是否具有找出這類問題答案的敏銳感覺。簡明的回答是 函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統 的一部分。你要確保弄懂 trap 自陷 這個關鍵字的含義。系統呼叫是在作業系統核心發現乙個 trap 或中斷後進行的。函式庫呼叫 vs...