2010-08-30 61 views
0

我想用C語言編寫unix套接字編程,但是在閱讀時出現Err No 4.我無法找到這個錯誤代碼的描述。有人有任何想法嗎?讀取系統調用

回答

2

如果將開始尋找Unix錯誤代碼名稱的最終來源(/usr/include/errno.h),你會在其中包含您的錯誤代碼

#define EINTR   4  /* Interrupted system call */ 

(這是該文件是留給你的文件到達作爲練習;))

2

對於不同的系統(甚至不同的類Unix系統),errno的值可能不同,所以應該在代碼中使用符號常量。

perror功能將打印出來(到STDERR)最後errno值與您提供的字符串沿着描述字符串。

man 3 perror 

strerror函數返回一個const char *的字符串perror打印。

如果4 EINTR您的系統上,那麼你的調用來讀取期間接收的信號。有辦法防止這種打斷你的系統調用,但通常你只需要:

while (1) { 
    ssize_t x = read(file, buf, len); 
    if (x < 0) { 
     if (errno == EINTR) { 
      errno = 0; 
      continue; 
     } else { 
      // it's a real error 
0

如果您收到EINTR,這可能意味着你已經正確安裝的信號處理程序。良好的Unix系統將默認爲重新啓動系統調用時,你只需撥打signal,但爲了安全,您應該使用bsd_signal功能(如果可用),或致電sigaction與重新啓動的標誌,以避免EINTR頭痛。