2009-07-12 57 views
7

在書中「C程序設計語言」,它說:。我在哪裏可以看到與errno交互的函數列表?

「許多庫中的一組狀態指示燈的功能,當發生錯誤或文件結束這些 指標可以設置並明確測試中此外,整數表達式errno(在<errno.h>中聲明爲 )可能包含一個錯誤號,它提供了有關最近的錯誤的更多信息。「

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

+0

@Leif,很酷,你正在通過K&R工作。我剛剛在假期裏完成了相同的幾天。 ( - : – 2009-07-12 18:49:04

回答

6

標準說,這大約errno

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

這對我說,任何庫函數可以在它喜歡的除了任何方式耍着errno

  • 不能置errno0
  • 它不能做什麼喜歡如果標準另有明確說明

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

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

正如在其他答案中指出的那樣,標準中沒有的功能也可以設置errno

5

您應該假定任何函數都可以設置errno,而不僅僅是標準庫中的那些。因此列表會有點毫無意義。

+0

我不同意,雖然生活一定會更容易你的方式!我目前正在努力與一些嵌入式庫返回消息,如「發生錯誤:errno = 0」因此,作爲OP暗示,如果你會赦免你的名字不可抗拒的雙關語,這將是有幫助的,能夠過濾出那些不設置errno爲有用的值的功能 – 2009-07-12 18:41:27

+1

@亞當那將是什麼雙關語嗎?我假設我失去了一些明顯而粗魯的東西? – 2009-07-12 19:13:52

+0

這個問題不是關於任何函數的 - 它是關於標準庫中的函數的,這個標準記錄了函數庫中用來修改errno的函數,沒有意義的是處理函數保證不會像修改errno一樣修改errno。 – Dingo 2009-07-12 21:38:41

0

一個適當的問題可能是什麼都值 errno可以得到和他們每個人的手段。你可以看到他們列在intro(2)

-1

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

1

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

1

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

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

相關問題