[英]What return value to use for `read()`?
我注意到,已經多次檢查過read()
的返回值,它使用的是int
類型,但是在檢查man時,我注意到read()
返回了一個類型為ssize_t
的值。
我知道“一般” int應該大於ssize_t,這就是為什么我們不會在錯誤中發生的原因。
但是我的問題是:
是否有理由使用int
而不是ssize_t
? 使用ssize_t
是不是最佳實踐?
示例代碼:
int x;
//ssiz_t x;
x = read(fd, &a, sizeof(a));
if (x == sizeof(a))
// all is fine
if (x == -1)
// Error while reading file
if (x == 0)
// Unexpected end of file
使用
ssize_t
是不是最佳實踐?
是。
通常,使用定義為要返回的函數的任何類型。
int
應該大於ssize_t
不,通常不是,至少在積極方面不是。
從POSIX文檔 :
ssize_t
類型應能夠存儲至少在[-1
,{SSIZE_MAX
}]范圍內的值。
我知道“一般” int應該大於ssize_t,這就是為什么我們不會在錯誤中發生的原因。
這不是真的。 完全沒有理由使該假設成立。
是否有理由使用int而不是ssize_t? 使用ssize_t是不是最佳實踐?
是。 使用ssize_t
來存儲read()
的返回值。
在大多數用例中, read()
可能正在處理可由int
處理的字節。 因此,使用int
可能從未遇到任何問題。 但這沒有理由比ssize_t
更喜歡int
。 始終使用正確的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.