簡體   English   中英

我在哪里可以看到與errno交互的函數列表?

[英]Where can I see the list of functions that interact with errno?

在“The C Programming Language”一書中,它說:

“當文件出現錯誤或文件結束時,庫中的許多函數都會設置狀態指示器。這些指示符可以顯式設置和測試。此外,整數表達式errno (在<errno.h>聲明)可能包含一個錯誤號提供有關最新錯誤的進一步信息。“

我在哪里可以看到這些功能的列表?

關於errno標准說這個:

程序啟動時errno的值為零,但任何庫函數都不會將其設置為零。 如果在本國際標准的功能描述中沒有記錄errno的使用,則可以通過庫函數調用將errno的值設置為非零值,無論是否存在錯誤。

其中告訴我,任何庫函數都可以以任何方式使用errno ,除非:

  • 它不能將errno0
  • 如果標准明確另有說明,它就無法做到它喜歡的事情

請注意,該標准在腳注中建議如下:

因此,使用errno進行錯誤檢查的程序應該在庫函數調用之前將其設置為零,然后在后續庫函數調用之前檢查它。 當然,庫函數可以在輸入時保存errno的值,然后將其設置為零,只要在返回之前errno的值仍然為零時恢復原始值。

如其他答案中所述,對於不在標准中的函數來說,設置errno也很常見。

您應該假設任何函數都可以設置errno,而不僅僅是標准庫中的那些。 因此,清單有點無意義。

如果發生錯誤,幾乎所有posix庫函數都可以設置errno,即函數返回-1時。 一個例外是線程函數,因為從多個線程設置一個全局錯誤變量將是非常危險的。 它們在成功時返回0,否則返回錯誤代碼(此代碼與errno兼容,因此您可以在其上使用strerror和perror函數)。

@Adam,正如Neil所說,任何函數都可以針對errno.h進行編譯並設置errno。 根據定義,不可能列出以這種方式編譯的所有實用程序以使用核心errno功能。

也就是說,有幾種方法可以將錯誤報告給用戶。 使用errno只是一個。

一個恰當的問題可能是errno可以獲得的價值以及每個價值意味着什么。 你可以在intro(2)看到它們。

您可以使用自己喜歡的編輯器和“在文件中查找...”來搜索包含errno關鍵字的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM