簡體   English   中英

將“ENOTDIR”,“EBUSY”等作為字符串返回的函數?

[英]A function returning “ENOTDIR”, “EBUSY”, etc. as strings?

strerror()函數返回一個簡短的錯誤描述,給出錯誤號作為參數。 例如,如果參數是ENOTDIR,它將返回“Not a directory”,如果參數是EBUSY,它將返回“Device or resource busy”等。

但是,是否有一個函數返回“ENOTDIR”參數等於ENOTDIR,“EBUSY”返回參數EBUSY等?

我只是想避免為此目的編寫一個巨大的switch語句。

否 - 沒有提供此功能的標准或常用非標准功能。

一種方法是編寫一個巨大的switch語句,但這可能不是你采取的最佳方法。 任何標准都沒有指定errno大多數值,因此它們的值在不同的操作系統甚至同一操作系統的不同版本之間可能也可能不一致。

此外,它會在后端產生痛苦。

如果可以接受某些運行時開銷,則更優雅的方法是編寫一個函數,在它們出現時查找這些錯誤代碼,而不是將值硬編碼到一個大表中。 GNU / Linux系統列出了所有可能的errno值:

/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h

這些文件提供每個errno值的#define及其值和相鄰注釋中的簡短描述。 逐行搜索這些文件並打印出匹配的錯誤代碼非常簡單。 即使不是,這些文件也是您編寫巨大的switch語句的開始。

請注意,當內核傳遞給用戶空間時,內核可能會否定這些值。

正如David指出的那樣,問題是沒有可以提供所需功能的標准功能。 因此,考慮到嘗試編寫腳本會是一個很好的問題,我寫了一些東西來自動生成切換函數(如果它應該是必要的)並在此處發布代碼。 似乎在OS X上工作正常,否則里程可能會有所不同。 可以將諸如此類的腳本添加到構建過程中,以確保正確定義了值。

暫無
暫無

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

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