2009-10-14 1 views
3

심볼릭 링크의 이름이 주어지면 링크가 가리키는 파일이나 디렉토리의 이름을 인쇄하는 C 프로그램을 작성하려고합니다. 시작하는 방법에 대한 제안?다음의 심볼릭 링크를 따르십시오.

+0

어떤 플랫폼에서이 작업을 수행하고 있습니까? Windows에서는 Win32 코드와 관련이 있습니다. – Cheeso

+0

나는 희미한 숙제 냄새를 감지합니까? (- : –

+0

나는 리눅스를 운영하고있다. – Ralph

답변

3

POSIX 기능을 지원하는 환경에 unistd.h을 포함하고 readlink 기능을 사용해야합니다.

1

플랫폼에 따라 stat() 또는 fstat()이 가장 먼저 시도 할 것입니다. Linux 또는 cygwin을 사용하고 있다면 stat 프로그램은 시스템 API 호출에서 기대할 수있는 것이 무엇인지에 대한 합리적인 아이디어를 제공합니다 (거의 텍스트 덤프를 제공합니다).

+0

'stat','fstat'과'lstat'은 수정 시간 같은 링크를 파일의 세부 사항으로 알려줄 것이지만, 링크가 가리키는 것을 말하지 않을 것이다. – Tim

+0

' readlink'에 대해 –

0

원하는 시스템 호출은 readlink()입니다. 링크에 대한 경로를 가져 와서 링크에 저장된 문자열 (이 아닌은 항상 유효한 파일 시스템 경로!)을 반환합니다. 자세한 내용은 맨 페이지 ("man 2 readlink")를 확인하십시오.

귀하의 질문에 약간의 모호성이 있습니다. 파일 시스템의 "실제"경로를 알려주는 방법을 묻는 것이 조금 더 복잡합니다.

+0

처럼 "realpath()"를 호출하는 것이 복잡합니까? – asveikau

+0

글쎄, 예. 링크 확장 알고리즘이 단일 시스템 호출보다 복잡하다는 것을 의미합니다. 다른 사람들이 제기 한 것처럼, 이것은 숙제로 보입니다. 라이브러리 호출이 수용 할 수있는 할당 솔루션이라고 생각합니다. :) –

5

언급 한 기능은 대답의 일부입니다. 그러나, 당신은 그 무시 무시한 인터페이스 (응답 문자열을 null로 끝내지 않는다는 것을 알고 있어야합니다!).

realpath() 함수를보고 싶을 수도 있습니다.이 함수의 용도는 SO 1563186입니다. IIUG Software Archive에서 'linkpath'의 코드를 볼 수도 있습니다. 그것은 심볼릭 링크가 해결 될 때 발생하는 모든 디렉토리의 보안을 분석합니다. readlink()lstat()stat()을 사용합니다. 프로그램을 테스트 할 때 수표 중 하나가 realpath()이 동일한 파일의 이름을 확인했는지 확인하는 것이 었습니다.

+0

thanks! 이 IIUG Software Archive는 어디에 있습니까? – Ralph

+0

@Corey : 현재 링크에있는 사이트에서 URL 인용 부호를 붙이면 URL 참조로 중화됩니다. –