我注意到有几次检查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
我知道"一般来说"int应该比ssize_t大,这就是为什么我们不会发生错误的原因。
那不是真的。没有任何理由认为这种假设是正确的。
有理由使用 int 而不是 ssize_t?使用ssize_t不应该是最佳实践吗?
是的。使用ssize_t
存储read()
的回报。
在您的大多数用例中,read()
可能正在处理可由int
处理的字节。因此,您可能从未遇到过使用 int
的任何问题。但这不是更喜欢int
而不是ssize_t
的理由。始终使用正确的类型。
使用
ssize_t
不应该是最佳实践吗?
是的。
通常使用函数定义为返回的任何类型。
int
应该比ssize_t
大
不,一般来说不是,至少不是积极的部分。
来自POSIX文档:
类型
ssize_t
应能够存储至少在 [-1
, {SSIZE_MAX
}] 范围内的值。