我注意到有几次检查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
答案 0 :(得分:1)
使用
ssize_t
不应该是最佳做法吗?
是
通常使用定义函数返回的任何类型。
int
应该大于ssize_t
不,一般来说不是,至少不是积极的部分。
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
。始终使用正确的类型。