0
調用uname(2)
後是否需要檢查錯誤?使用uname(2)檢查錯誤?
根據手冊頁:
如果成功,則返回零。出錯時,返回-1,並且適當地設置errno爲 。
和錯誤標題下,
EFAULT BUF無效。
是列出的唯一錯誤。
因此,如果給定有效的struct utsname
緩衝區,我是否可以假設uname
永遠不會失敗?
調用uname(2)
後是否需要檢查錯誤?使用uname(2)檢查錯誤?
根據手冊頁:
如果成功,則返回零。出錯時,返回-1,並且適當地設置errno爲 。
和錯誤標題下,
EFAULT BUF無效。
是列出的唯一錯誤。
因此,如果給定有效的struct utsname
緩衝區,我是否可以假設uname
永遠不會失敗?
號
只是因爲EFAULT
是列出的唯一errno
,但這並不意味着uname
絕不會只要你傳遞一個有效的緩衝失敗。它可能因任何其他原因失敗。即如果uname
的返回碼是-1
,那麼它失敗,不管errno
的值如何。
errno
僅在函數/系統調用指示失敗時纔有意義;它本身並沒有定義庫函數/系統調用的成功/失敗。
好的。謝謝。 – yossarian
@ P.P。但是,爲什麼它會失敗呢?除了在內核編譯過程中禁用該功能還有其他任何原因,例如通過'LD_LIBRARY_PATH'將其替換爲另一個實現。但後者需要另一個版本的libc,對。 – user877329
@ user877329使用LD_LIBRARY_PATH和/或LD_PRELOAD等基本上是黑客攻擊,如果是這樣的話,所有的賭注都是關閉的。 uname失敗的可能性可能接近於0(不包括內核中的錯誤等情況)。在[Linux]上(http://man7.org/linux/man-pages/man2/uname.2.html),信息來自正在運行的內核。但POSIX並沒有定義這個信息來自哪裏。因此,在另一個操作系統上,它可能以不同的方式實現,並可能由於某種原因而失敗。從用戶的角度來看,檢查返回值是實用的方法,而不是依賴任何實現/操作系統的知識。 –