参考《linux高级程序设计》 杨宗德
1、linux数据类型的限制
在linux操作系统下使用GCC进行编程。系统对每一个数据类型都进行了限制。
具体的限制文件在 /user/include/limit.h 。该文件对Linux下数据类型的限制及存储字节的大小进行了说明。
资源限制影响到调用进程并由其子进程继承,这就意味着为了影响一个用户的所有后续进程,需将资源限制的设置构造在shell之
中,确实,bsh,bash,ksh具有内置的ulimit命令,csh具有内置的limit命令。(umask和chdir也是shell内置的)
2、系统资源的限制
为了防止某些进程对系统造成破坏,linux对每个进程能够使用的资源都进行了限制。比如进程执行的最大CPU时间,进程能够打开的文件的最大数量等等各种资源。
在应用层,可以使用 getrlimit()函数来获取系统对某资源的限制。
#include <sys/resource.h>
int
getrlimit(
int
resource,
struct
rlimit *rlim);
int
setrlimit(
int
resource,
const
struct
rlimit *rlim);
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EFAULT:rlim指针指向的空间不可访问
EINVAL:参数无效
EPERM:增加资源限制值时,权能不允许
On success, these system calls return 0. On error, -1 is returned, and errno is set appropriately.
在这里使用到了一个结构体 rlimit,
其中 rlim_cur 叫做软限制(soft limit)
rlim_max 叫做硬限制 (hard limit)
其中 软限制必须小于等于硬限制,也即 rlim_cur <= rlim_max。
还有就是:
①任何一个进程都可以变大或变小软限制,但是软限制最大只能等于硬限制。
② 任何一个进程都可以降低硬限制的值,但是只有root进程才可以提高硬限制的值。
RLIM_INFINITY的值表示不对资源限制
图片来自《unix 环境高级编程》