我想用C語言編寫unix套接字編程,但是在閱讀時出現Err No 4.我無法找到這個錯誤代碼的描述。有人有任何想法嗎?讀取系統調用
Q
讀取系統調用
0
A
回答
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
頭痛。
相關問題
- 1. 強制讀取系統調用塊
- 2. 如何阻止讀取系統調用
- 3. 讀取系統調用垃圾字符
- 4. 掛鉤讀取系統調用
- 5. 關於讀取系統調用c
- 6. 系統調用讀取和寫入C
- 7. `在C中讀取()`系統調用不會讀取字節
- 8. 獲取系統調用
- 9. 使用讀寫系統調用與sprintf
- 10. 如何捕獲讀寫系統調用?
- 11. 系統調用(讀/寫與ioctl)
- 12. 系統調用:解讀的ktrace輸出
- 13. 寫作Haskell的FFI讀系統調用
- 14. C如何使用read系統調用讀取字節?
- 15. 在ARM程序集中使用讀取系統調用
- 16. 在C中使用系統調用來讀取鍵盤事件
- 17. mmap系統調用使用Golang的讀取
- 18. 如何檢查讀取系統調用是否讀取了整個數據
- 19. 在Android系統中讀取系統功能/用戶操作
- 20. 使用PHP讀取系統日誌
- 21. 系統(「」)調用
- 22. int filedes?系統調用讀取和寫入
- 23. strace如何讀取系統調用sys_open的文件名?
- 24. 如何進行系統調用並讀取D中的stdout?
- 25. 在文本文件上讀取系統調用
- 26. 從x64 linux系統調用(組件)讀取鍵盤輸入
- 27. 看不慣讀取系統調用的行爲
- 28. 緩存讀取系統存儲器VS CPU讀取系統存儲器
- 29. 從/ proc/kcore獲取系統調用表中的系統調用地址
- 30. 如何從系統調用號碼獲取Linux系統調用名稱?