软限制值 才是 实际的限制值?

举个例子:

打开的文件数限制:resource = RLIMIT_NOFILE

1.打印其软限制值 硬限制值

struct rlimit lim;
getrlimit(RLIMIT_NOFILE, &lim);
printf("软限制-> %ld, 硬限制-> %ld\n", lim.rlim_cur, lim.rlim_max);

2.打开文件,通过open,一直打开 直到限制值那么多个文件

        ·先用硬限制

for (int i = 0; i < lim.rlim_max; ++i) {
    snprintf(filename, sizeof(filename), "%d_%ld", getpid(), i);
    fd = open(filename, O_RDWR| O_CREAT | O_TRUNC, 0664);
    if(fd < 0) {
        fprintf(stderr, "open file %s failed\n", filename);
        exit(1);
    } else {
        printf("open file %s success\n", filename);
    }
}

3.输出:软限制1024,硬限制4096

        发现:

                   1> i 明明是小于硬限制,但文件却只读取了1021个。。

                   2> 1021这个值如果是软限制的话,那为啥不是1024?

       

        解答:1> 因为 软限制 才是 实际的 限制值;

                        比如你想吃汉堡,你的肚子最多只能吃2个,但是商店最多却可以卖你5个;

                        那肚子的含堡量看作是资源,软限制 = 2,硬限制 = 5;

                        你明明被允许吃5个,但却只能吃2个。

                        但如果你被赋予了大胃王神力,即软限制 = 硬限制 了,也就是你的肚子可以容纳5个了,那此时软限制 = 5 硬限制 = 5, 代码示例:

lim.rlim_cur = lim.rlim_max;
for (int i = 0; i < rlim_max; ++i) { //此时 软限制(实际的限制值) 已是4096
    ...
}

                        输出:

 

                        综上,肚子容纳多少汉堡 取决于 肚子(软限制),就算是调用硬限制  那备用的值的大小 还是和软限制一样。

                3>  每个进程启动的时候,会默认打开 stdin, stdout, stderr 3个文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值