특히 SO question과 this answer 다음에 printf 다음에 setrlimit를 호출하면 작동하지 않게되는 것 같습니다.printf가 setrlimit을 작동하지 않게합니다.
limit 10000 9223372036854775807
failed after 9967
: 내가 처음 printf
을 언급하는 경우
Hello
limit 10000 9223372036854775807
failed after 4861
가 여기에 콘솔 출력입니다 : 여기
#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; }
}
}
콘솔 출력 : 여기에
은 예제 코드 거기에 어떤 이유가 있습니까?
[편집] Xcode 4.6.2를 사용하여 MAc OS X 10.7.5를 실행하고 있습니다.
1. 코드가 출력과 일치하지 않습니다. 2. 방금 Red Hat 5 시스템에서이 시스템을 시험해 보았습니다. "Hello"의 유무와 상관없이 동일한 번호를 받았습니다. 나는 또한 그것이 당신의 시스템에서 어떤 일이 일어나고 있는지에 달려 있다고 믿습니다. – BoBTFish
이것은 내가 사용하고있는 정확한 코드입니다. MacOS 10.7에서 Xcode 4.6.2를 사용하고 있습니다. –
정말요? ** 정확한 ** 코드는'printf ("after ...")'를 포함하고 있지만 "limit ..."'를 출력합니까? 당신의'printf' 구현은 심각하게 깨졌습니다 !! – BoBTFish