POSIX标准中的 “ 限制 ”
前言
在POSIX标准中,定义了许多限制。这些限制大约分为五类,不同类型的限制获取的方式不一样。
限制值分类
1. 不变的最小值
这类型的限制值是静态的,固定的。
2. 不变值
同上
3. 运行时可以增加的值
这类型的限制值在程序运行时会发生动态的变化。
4. 运行时不变的值( 可能不确定 )
这类型的限制值在程序运行时不变,但它不是完全静态的,和内存空间等环境有关。
PS:所谓可能不确定是指这样的值可能是没有上限的
5. 路径名可变值( 可能不确定 )
这类型的限制值随着路径的变化而变化。
1,2类型限制值获取
对于1,2类型的限制值,我们可以直接到头文件中获取到:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 1,2类型的限制值包含于下头文件中 5 #include <limits.h> 6 7 int main(int argc, char **argv) 8 { 9 printf("%s : %d\n", "每个进程的最大文件数", _POSIX_OPEN_MAX); 10 11 return 0; 12 }
运行测试
3,4类型限制值获取
对于第3,4种类型的限制值,我们需要调用函数 sysconf 来获取:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 用于限制值获取的三个函数包含在下头文件中 5 #include <unistd.h> 6 7 int main(int argc, char **argv) 8 { 9 long p; 10 11 p = sysconf(_SC_CHILD_MAX); 12 printf("%s : %ld\n", "每个实际用户ID的最大进程数", p); 13 14 return 0; 15 }
运行测试
5类型限制值的获取
对于第5种类型的限制值,我们需要调用函数 pathconf 或者 fpathconf 来获取:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 用于限制值获取的三个函数包含在下头文件中 5 #include <unistd.h> 6 7 int main(int argc, char **argv) 8 { 9 long p; 10 11 p = pathconf("/home/fangmeng/1", _PC_NAME_MAX); 12 printf("%s : %ld\n", "文件连接数的最大值", p); 13 14 return 0; 15 }
运行测试
说明
1. 限制值的这几种分类有些混乱。有些限制值在一个给定的实现上是固定的( 可以在头文件中找到 ),但在另一个给定的实现上可能是变化的( 需要调用函数获取 )。
2. 在实际开发中,对于“ 不确定 ”的限制值类型,我们要做特别的处理。请参考我的下一篇文章 - “ 不确定 "限制值的使用。