linux的getrlimit()和setrlimit()

xiaoxiao2021-02-28  100

参考《linux高级程序设计》 杨宗德 参考: http://www.cnblogs.com/niocai/archive/2012/04/01/2428128.html 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 环境高级编程》
转载请注明原文地址: https://www.6miu.com/read-81497.html

最新回复(0)