0
特別是在SO question和this answer之後,似乎在printf使其不起作用之後調用setrlimit。printf使setrlimit不起作用
下面是示例代碼:
#include <stdio.h>
#include <sys/resource.h>
int main()
{
struct rlimit rlp;
FILE *fp[10000];
int i;
printf("Hello\n");
rlp.rlim_cur = 10000;
rlp.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_NOFILE, &rlp);
getrlimit(RLIMIT_NOFILE, &rlp);
printf("limit %lld %lld\n", rlp.rlim_cur, rlp.rlim_max);
for(i=0;i<10000;i++) {
fp[i] = fopen("a.out", "r");
if(fp[i]==0) { printf("failed after %d\n", i); break; }
}
}
這裏是控制檯輸出:
Hello
limit 10000 9223372036854775807
failed after 4861
如果我評論的第一printf
,這裏是控制檯輸出:
limit 10000 9223372036854775807
failed after 9967
這有什麼理由嗎?
[編輯]我正在使用Xcode 4.6.2運行MAc OS X 10.7.5。
1.您的代碼與輸出不匹配。 2.我剛剛在Red Hat 5系統上嘗試過,並且在沒有「Hello」的情況下得到相同的數字。我相信它也將取決於你的系統上還在發生什麼。 – BoBTFish
這是我正在使用的確切代碼。我在Mac OS 10.7上使用Xcode 4.6.2,也許這就是爲什麼。 –
真的嗎?您正在使用的**精確**代碼包含'printf(「...之後)」,但打印出「limit ...」'?你的'printf'實現被嚴重破壞! – BoBTFish