C语言 用于“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

我知道"一般来说"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 }] 范围内的值。

最新更新