현재 디렉토리와 일반 파일을 구별 할 필요가있는 일종의 재귀 적 찾기를 수행하려고합니다. 주어진 파일이 디렉토리이지만/home에 적용될 때 S_ISDIR을 사용하여 루프를 만들었는데 예상 한 결과를 얻지 못했습니다.디렉토리의 다른 값을 반환하는 S_ISDIR
/home/.
/home/..
/home/pome
을하지만, 디렉토리, S_ISDIR()에 대한 이과 0과 1을 반환로 이과를 감지하지 않습니다 난 단지 때문에 예상 된 결과가 될 것이다에서/집 이과 디렉토리가 있습니다. 와 ..
코드 :
DIR * dir = opendir("/home");
if(dir==NULL){
puts("Unknown directory");
return 1;
}
char path[SIZE_PATH];
memset(path,'\0',sizeof(path));
strcpy(path,"/home");
struct dirent * trucdir;
char filename[SIZE_PATH];
memset(filename,'\0',sizeof(filename));
struct stat * filestat=malloc(sizeof(struct stat));
while((trucdir=readdir(dir))!=NULL){
memset(filename,'\0',sizeof(filename));
strcpy(filename,trucdir->d_name);
stat(filename,filestat);
if(S_ISDIR(filestat->st_mode)!=0){
puts(filename);
}
}
이 파일이 디렉토리 인 경우 영이 아닌 값을 반환하기로 S_ISDIR되지 않는 이유는 무엇입니까?
문제와 관련이 없지만 함수가 포인터를 예상한다고해서 동적으로 할당해야하는 것은 아닙니다. 'struct stat'와'stat' 함수를 사용하는 경우에는'struct stat filestat;'와'stat (filename, & filestat);를 사용하면됩니다. –
'stat()'호출이 어떻게 작동했는지 어떻게 알 수 있습니까? –
문제에 관해서는'opendir'에 전달 된 경로와'readdir'에 의해 주어진 이름을 연결하는 것을 잊어 버립니다. 또한'stat'가 반환하는 것을 확인하면'-1'을 반환하고'errno'를'ENOENT'로 설정할 것입니다. 이 문제는 [프로그램 디버깅 방법을 알고 있다면] 분명해야합니다 (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –