linux的getrlimit()和setrlimit()

参考《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 环境高级编程》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值