2015-11-06 40 views
2

在Linux和OS X上,strerror返回一個人類可讀的名稱。例如,下面是它返回在Linux上剛纔的錯誤號5是否有一個函數會爲`errno`值返回符號名稱,例如`EIO`?

Input/output error 

這很好,但該男子頁使用符號的名稱,如EIO,並且沒有列出相應的數字。有沒有我可以用來獲取符號名稱的函數?

+0

(請假設我不想寫我自己的功能來做到這一點。) –

回答

2

我非常懷疑純粹的POSIX提供的便利設施。在大多數情況下,我個人只是在編輯器中打開/usr/include/errno.h文件並從那裏瀏覽它。 (在Linux上,最終導致其中的代碼實際上是指定/usr/include/asm-generic/errno-base.h/usr/include/asm-generic/errno.h文件)

而且,與海灣合作委員會(或鐺)系統,我能想出的小腳本是這樣的:

gcc -dM -E - < /usr/include/errno.h | 
    grep 'define E\w\+ [0-9]\+$' | 
    sort -k3 -n 

GNU預處理器有一個選項(-dM)來打印輸出時遇到的所有定義。這可以用於幫助解析/usr/include/errno.h文件以提取錯誤代碼。

+0

感謝您的迴應。是的,這看起來好像這是我必須做的。 (我希望不必這樣做,因爲我不想承擔更新系統特定錯誤時引起的映射更新的負擔。) –

+1

是的,這是遺漏的。錯誤代碼很少被添加/刪除 - 通常是不經意的。最常見的錯誤是「常見的嫌疑人」,如「拒絕訪問」或「設備上沒有空間」,並且它們具有穩定的數字代碼。如果你要保持在你的程序中的映射,你不需要經常更新它。請不要忘記記錄數字錯誤代碼。 – Dummy00001

相關問題