opendir 함수를 사용하여 디렉토리가 존재하는지 확인합니다. 문제는 방대한 루프에서 사용하고 있으며 앱에서 사용하는 RAM을 부 풀리는 것입니다.C 디렉토리가 있는지 확인하는 더 빠른 방법
디렉토리가 C에 있는지 확인하는 가장 빠른 (가장 빠른) 방법은 무엇입니까? 그것이 없으면 가장 좋은 (가장 빠른) 방법은 무엇입니까?
opendir 함수를 사용하여 디렉토리가 존재하는지 확인합니다. 문제는 방대한 루프에서 사용하고 있으며 앱에서 사용하는 RAM을 부 풀리는 것입니다.C 디렉토리가 있는지 확인하는 더 빠른 방법
디렉토리가 C에 있는지 확인하는 가장 빠른 (가장 빠른) 방법은 무엇입니까? 그것이 없으면 가장 좋은 (가장 빠른) 방법은 무엇입니까?
가능한 경우 stat()
을 사용합니다.
stat
을 사용해보십시오. S_ISDIR(s.st_mode)
이 디렉토리인지 알려줍니다.
샘플 : 메모리 누수가 같은
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
...
struct stat s;
int err = stat("/path/to/possible_dir", &s);
if(-1 == err) {
if(ENOENT == errno) {
/* does not exist */
} else {
perror("stat");
exit(1);
}
} else {
if(S_ISDIR(s.st_mode)) {
/* it's a dir */
} else {
/* exists but is no dir */
}
}
...
얼마나 빨리 opendir과 비교합니까? –
운영 체제 및 상위 디렉토리에있는 항목 수에 따라 다릅니다. 그것은 어떤 식 으로든 더 빠를 것이고 그것은 바로'stat'를위한 것입니다. –
Linux 64 비트, 1 항목 –
소리가 난다. opendir을 호출하면 디렉토리를 성공적으로 연 후에 항상 closedir을 호출하는 것을 기억하는 한 앱의 RAM을 부풀려서는 안됩니다. 또한 디렉토리 이름을 계산하기 위해 할당 한 버퍼를 해제해야합니다.
Yeap 나는 그것을 닫고있다, 나는 통계를 사용하겠다. 시간 내 주셔서 감사합니다! –
난 당신이 디렉토리 이름에 후행 /
을 확인하면 access()
if (0 != access("/path/to/possible_dir/", F_OK)) {
if (ENOENT == errno) {
// does not exist
}
if (ENOTDIR == errno) {
// not a directory
}
}
를 사용하여 선호하는이 완벽하게 작동합니다.
바보 같은 질문입니다. 이후에 closedir()을 호출합니까? – user7116
더 빠른 방법은 비동기 적으로 수행하는 것이지만 미디어의 기능을 고려해야합니다. 그것이 일반 HDD 인 경우 탐색 폭풍으로 실패 할 수 있으며 느리게 작동합니다. 그러나 RAID/SSD를 사용하거나 클라우드에서 작업하는 경우에도 정상적으로 작동합니다. – LiMar