, 당신은 (내 생각)을 찾는 일이 같은 트릭을 달성 할 수 있습니다 물론
#include <stdio.h>
unsigned int open_files = 0;
FILE *fopen_counting(const char *path, const char *mode)
{
FILE *v;
if((v = fopen(path,mode)) != NULL) ++open_files;
return v;
}
int fclose_counting(FILE *fp)
{
int v;
if((v = fclose(fp)) != EOF) --open_files;
return v;
}
#define fopen(x,y) fopen_counting(x,y)
#define fclose(x) fclose_counting(x)
, 스 니펫 이렇게하면 제어 할 코드에만 영향을 미칩니다. fopen
또는 fclose
에 대한 호출이 이루어지기 전에 #include
d가되어야합니다. 그렇지 않으면 대체 대신 원래 함수가 호출됩니다.
열린 파일 디스크립터의 현재 수를 반환하는 시스템 기능에 관해서는, 불행히도 그런 것을 인식하지 못했습니다. 하지만 디버거에서 응용 프로그램을 실행하고 중단 점을 fopen
에 설정하고 단순히 OS 도구를 사용하여 해당 번호를 확인하는 것을 멈추게하는 것은 무엇입니까? Linux에서 프로세스의 열린 파일 디스크립터의 수는 /proc/$PID/fd
디렉토리의 항목 수와 같습니다. 이렇게하면 어떤 실제 파일이 어떤 파일 디스크립터에 할당되는지 알 수 있습니다.
아마도 코드를 게시하는 것이 도움이 될 것입니다. –
나는 내 문제를 해결했다 : openfiles라고 불리는 시스템 기능이있다. 당신의 프로세스를 위해 열린 파일 목록이다. 중복 된 포함에 대한 uneeded fopen이 문제가 발생했습니다. 모두 – Aymanadou