S_ISDIR(m)에 관해
      글쓴이: twins99 / 작성시간: 수, 2005/11/30 - 3:58오후    
  
  다음 코드를 봐 주세요.
책에 있는 예제 코드인데요, 실행시에 문제가 발생하네요.
일단 코드 올라갑니다.
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
void printdir(char *dir, int depth)
{
	DIR	*dp;
	struct dirent *entry;
	struct stat 	statbuf;
	if((dp = opendir(dir)) == NULL){
		fprintf(stderr,"cannot open directory: %s\n");
		return ;
	}
	
	chdir(dir);
	while((entry = readdir(dp))!= NULL){
		stat(entry->d_name, &statbuf);
		if(S_ISDIR(statbuf.st_mode)){
			if(strcmp(".",entry->d_name) == 0 ||
				strcmp("..",entry->d_name) ==0)
				continue;
			printf("%*s%s/\n",depth,"",entry->d_name);
			printdir(entry->d_name, depth+4);
		}
		else printf("%*s%s\n",depth, "", entry->d_name);
	}
	chdir("..");
	closedir(dp);
}
int main()
{
	char d[100] = {"/root/Desktop/Trash/dist/include/dom"};
	printf("Directory scan of %s\n",d);
	printdir(d,0);
	printf("done.\n");
	return 0;
}
실행시에 모든 서브 디렉토리를 보여주는 코드인데요,
directory인지 판별하는 S_ISDIR()에서 symbolic link는
구별을 못해 주네요.. statbuf.st_mode를 찍어보면
그냥 디렉토리랑 똑같은 mode값을 가집니다.
이거 어떻게 해결해야 하나요?? 미치겠습니다.
--추가합니다.
꼭 symbolic link파일이 아니고 일반 regular file도 directory
로 인식하는 경우가 있네요. 근데, random하게 그런게 아니라
특정 파일의 경우에만 그럽니다..이거 어떻게 해결해야 하나요?
Forums: 


lstat의 멘페이지에서 발췌했습니다.[quote]The ls
lstat의 멘페이지에서 발췌했습니다.
감사합니다.
답변 감사드립니다.
댓글 달기