C:使用RLIMIT_FSIZE设置软限制的问题

时间:2015-02-15 16:35:19

标签: c

我正在阅读有关getrlimt / setrlimit的手册页面,我正在按照相应的示例进行操作。

我正在尝试设置“软”限制,但是当我设置软限制并将其打印出来时,它就完全错了。

示例:我将软限制设置为50,我得到软限制为219030298624。 我将软限制设置为100,我得到软限制是42953954893824。 我将软限制设置为100000,如下面的代码中所列,我得到与上面相同的内容。

发生了什么事?

        struct rlimit limit;
        getrlimit (RLIMIT_FSIZE, &limit);
        limit.rlim_cur = 100000;
        setrlimit (RLIMIT_FSIZE, &limit);


        struct rlimit rl;
        getrlimit (RLIMIT_CPU, &rl);
        rl.rlim_cur = 1;     
        setrlimit (RLIMIT_CPU, &rl);

        printf("The soft limit is %llu\n", limit.rlim_cur);

2 个答案:

答案 0 :(得分:1)

setrlimit不会返回当前值。您需要在设置值后调用getrlimit以检索当前值。

 struct rlimit rl;
 getrlimit (RLIMIT_CPU, &rl);
 rl.rlim_cur = 1;     
 setrlimit (RLIMIT_CPU, &rl);

 getrlimit (RLIMIT_CPU, &rl);
 printf("The soft limit is %llu\n", rl.rlim_cur);

或者您可以使用prlimit来设置和接听一个http://linux.die.net/man/2/prlimit

答案 1 :(得分:0)

%llu不一定是rlim_t的有效格式说明符。这是无意义的巨大价值观的源泉;你通过将不匹配的类型传递给printf来调用UB。转换为long long,打印的值应该是正确的。