用于`read()`的返回值是什么?

时间:2017-01-04 11:38:34

标签: c types posix systypes.h

我注意到有几次检查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

2 个答案:

答案 0 :(得分:1)

  

使用ssize_t不应该是最佳做法吗?

通常使用定义函数返回的任何类型。

  

int应该大于ssize_t

不,一般来说不是,至少不是积极的部分。

来自POSIX documenation

  

ssize_t 类型应至少能够存储[-1,{SSIZE_MAX}]范围内的值。

答案 1 :(得分:1)

  

我得到了#34;一般而言#34; int应该大于ssize_t,这就是为什么我们不会出错。

那不是真的。对于这个假设来说,没有任何理由是绝对没有理由的。

  

是否有理由使用int而不是ssize_t?使用ssize_t不应该是最佳做法吗?

是。使用ssize_t存储read()的回复。

在大多数用例中,read()可能正在处理可由int处理的字节。因此,您可能从未在使用int时遇到任何问题。但是,没有理由更喜欢int而不是ssize_t。始终使用正确的类型。