簡體   English   中英

read()使用什么返回值?

[英]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.

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