c - 允许 size_t 请求但仅 ssize_t 结果的系统调用的基本原理?

标签 c linux unix

考虑:

ssize_t write(int fd, const void *buf, size_t count);

必须对结果进行签名以说明错误等情况下的 -1,因此是 ssize_t。但是,当要求超过 ssize_t 的结果未定义时,为什么允许请求是无符号数(两倍大)?

是否由于不检查计数参数的符号性而对内核进行了重大优化?还是别的?

最佳答案

根据 the documentation对于 ssize_t write(int fildes, const void *buf, size_t nbyte)

If the value of nbyte is greater than {SSIZE_MAX}, the result is implementation-defined.

因此每个特定的实现可能会以不同的方式处理这种情况。如果某些实现只是设置 EFBIG,我不会感到惊讶。

至于基本原理,也许 size_t 只是从语义上表示缓冲区大小的最佳类型?它声明此参数是一个非负大小,仅此而已。

关于c - 允许 size_t 请求但仅 ssize_t 结果的系统调用的基本原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859707/

相关文章:

c - 如何获得 2^100 * 3^3 模 1000000007 的结果

c - 如何创建动态大小的 NULL 指针数组?

c - #define 类函数宏中的数据类型

c - 索拉里斯 10 : handle gracefully ENOBUFS error when changing socket buffer

unix - 如何在给定的时间间隔内运行 Unix 命令?

c++ - 有符号整数类型的最大值

linux - 如何告诉 CMake 将构建文件放在哪里?

linux - 重新安装Ubuntu

linux - Bash 脚本删除 C 代码文件中不存在代码的注释行?

unix - 使用 >> 将多个并行进程的输出通过管道传输到一个文件是否安全?