2012-05-21 3 views
4

POSIX scandir()을 사용하여 한 디렉토리를 다른 디렉토리 (예 : cp -R)로 반복적으로 복사하려고합니다.scandir()을 사용할 때 모든 파일을 열지 만 다른 디렉토리에 대한 링크가 없습니다.

문제는 상위 수준 (예 : foo/foo1/foo2/foo/foo1/foo2/foo/...)에 대한 링크가 포함 된/sys/bus /와 같은 디렉토리를 복사 할 때 시스템 루프 상태를 입력하고 "중간에"디렉토리를 영원히 복사합니다 ...

dirent로 시작하는 파일이 링크인지 어떻게 확인할 수 있습니까? 이것

+1

* S_ISLINK로 시도했지만 작동하지 않습니다 - Black27 *. http://stackoverflow.com/questions/8875663/is-there-any-posix-way-through-fstat-to-check-whether-a-file-is-a-symbolic-lin – dirkgently

+0

중지 하시겠습니까? symlinks에서, 또는주기를 피하기 위해? – slezica

답변

1

봐 : How to check whether two file names point to the same physical file 당신은 당신이 어떤 중복하지 않도록하기 위해 방문한 아이 노드의 목록을 저장할 필요가

. 동일한 파일에 대한 두 개의 하드 링크가있는 경우 "하나"의 정식 이름이 없습니다. 하나의 가능성은 먼저 모든 파일을 저장 한 다음 모든 파일 이름을 통해 재귀하는 것입니다. inode 및 파일 내용과 별도로 경로 구조를 저장할 수 있습니다.

+0

대답하기가 꽤 늦었습니다.하지만 당신이 내 문제를 해결했다고 말하고 싶었습니다! 정말 고맙습니다! –