[apue] 一个快速确定新系统上各类限制值的工具
对于在不同 Unix 系统之间移植程序,最重要的事情就是确定新系统的一些编译时、运行时固定或不固定的限制值了。例如文件路径最大长度 PATH_MAX、进程最大可打开文件句柄数 OPEN_MAX、用户可加入的附加用户组最大数量 NGROUPS_MAX、进程命令行参数最大字节数 ARG_MAX、内存页大小 PAGESIZE、线程栈大小默认值 STACKSIZE、临时文件最大数量 TMP_MAX 等等。甚至有些系统特征也可以通过查询来提前确定,例如是否支持读写锁、是否支持异步 IO、是否支持实时信号等等,这样程序就可以根据系统提供的能力来选择不同的接口去实现同样的功能。 回头来看 apue 第二章有关系统限制与选项这一块的内容,由于掺杂了 UNIX 标准化的内容,显得很没有条理,例如将各种限制按标准划分为: ISO C 编译时限制 (头文件常量) POSIX 不变的最小值 (声明遵循 POSIX 的系统必需支持到至少这么多,不能再小了) 不变值 (SSIZE_MAX) 运行时可增加的值 运行时不变的值 路径名可变值 XSI 不变的最小值 (同上) 数值限制 运行时不变值 看得人一头雾水,其实如果抛开标准,单按限制的性质来分,就比较简单啦: 编译时限制 (通过头文件常量) 运行时限制 不与文件系统相关部分(通过 sysconf) 与文件系统相关部分(通过 pathconf) 也就是说