考虑:
ssize_t write(int fd, const void *buf, size_t count);
Run Code Online (Sandbox Code Playgroud)
结果必须在出错时将其签名为-1,等等,因此为ssize_t.但是,当要求超过ssize_t的结果未定义时,为什么允许请求为无符号数量(两倍大)?
由于没有检查计数参数的有效性,内核是否有重大的优化?或者是其他东西?
我认为它很好,因为size_t是sizeof运算符返回的值的类型,这允许这样的调用:
char buffer[1 << 20];
ssize_t wrote;
wrote = write(fd, buffer, sizeof buffer);
Run Code Online (Sandbox Code Playgroud)
如果函数采用签名版本,则需要进行强制转换.此外,正如其他人所指出的那样,语义上这些函数不能接受负值,因此接受它们并没有多大意义.