我正在阅读有关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);
答案 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
,打印的值应该是正确的。