ssize_t
头文件
<sys/types.h>
类型
有符号整型
作用
字节数或(为负时)标识错误。 由多个系统调用和库函数返回,作为指示错误的一种方式。如read()、write()
ssize_t read(int fd, void *buf, size_t nbyte);
ssize_t write(int fd, const char* buf, size_t nbyte);
POSIX手册原文
ssize_t : Used for a count of bytes or an error indication.
归纳
size_t
头文件
<stddef.h>
类型
无符号整型
作用
对象大小(以字节数计)。 用于表示内存中对象的大小,是sizeof 运算符和strlen 函数的返回值类型。这意味着它是无符号整书类型,它的具体大小取决于平台;选择的尺寸足够大以表示该平台上的所有尺寸。
比如:对数组索引时,size_t 保证足够大以表示数组中所有可能的索引。
POSIX手册原文:
- size_t : Unsigned integer type of the result of the sizeof operator.
The implementation shall support one or more programming environments in which the widths of ptrdiff_t, size_t, and wchar_t are no greater than the width of type long. The names of these programming environments can be obtained using the confstr() func‐ tion or the getconf utility. …
归纳
- 无符号整型
- 足够大(取决于平台)
- 表示对象大小
- 宽度不大于long类型
- size_t : Used for sizes of objects.
补充
关于read()、write()中一次性读写nbyte(size_t类型)字节,返回值为却为ssize_t 类型,这说明nbyte是可能超过ssize_t的最大上限SSIZE_MAX的。
手册中:
- According to POSIX.1, if count is greater than SSIZE_MAX, the result is implementa‐tion-defined; see NOTES for the upper limit on Linux.
- If the value of nbyte is greater than {SSIZE_MAX}, the result is implementation-de‐
fined.
说是由具体实现定义的,不过很是奇怪它们怎么解决。 我想应该是没有解决的,不过看了stackoverflow上的讨论,觉得 很有道理论: SSIZE_MAX,在我的64位机上,是2^63-1,也就是9223372036854775807,也就是8589934591.9GB,85亿GB。
呵呵,应该等到我去世都不用担心这个问题。
|