심볼릭 링크의 이름이 주어지면 링크가 가리키는 파일이나 디렉토리의 이름을 인쇄하는 C 프로그램을 작성하려고합니다. 시작하는 방법에 대한 제안?다음의 심볼릭 링크를 따르십시오.
답변
POSIX 기능을 지원하는 환경에 unistd.h
을 포함하고 readlink 기능을 사용해야합니다.
플랫폼에 따라 stat()
또는 fstat()
이 가장 먼저 시도 할 것입니다. Linux 또는 cygwin을 사용하고 있다면 stat
프로그램은 시스템 API 호출에서 기대할 수있는 것이 무엇인지에 대한 합리적인 아이디어를 제공합니다 (거의 텍스트 덤프를 제공합니다).
'stat','fstat'과'lstat'은 수정 시간 같은 링크를 파일의 세부 사항으로 알려줄 것이지만, 링크가 가리키는 것을 말하지 않을 것이다. – Tim
' readlink'에 대해 –
원하는 시스템 호출은 readlink()입니다. 링크에 대한 경로를 가져 와서 링크에 저장된 문자열 (이 아닌은 항상 유효한 파일 시스템 경로!)을 반환합니다. 자세한 내용은 맨 페이지 ("man 2 readlink")를 확인하십시오.
귀하의 질문에 약간의 모호성이 있습니다. 파일 시스템의 "실제"경로를 알려주는 방법을 묻는 것이 조금 더 복잡합니다.
처럼 "realpath()"를 호출하는 것이 복잡합니까? – asveikau
글쎄, 예. 링크 확장 알고리즘이 단일 시스템 호출보다 복잡하다는 것을 의미합니다. 다른 사람들이 제기 한 것처럼, 이것은 숙제로 보입니다. 라이브러리 호출이 수용 할 수있는 할당 솔루션이라고 생각합니다. :) –
언급 한 기능은 대답의 일부입니다. 그러나, 당신은 그 무시 무시한 인터페이스 (응답 문자열을 null로 끝내지 않는다는 것을 알고 있어야합니다!).
realpath()
함수를보고 싶을 수도 있습니다.이 함수의 용도는 SO 1563186입니다. IIUG Software Archive에서 'linkpath'의 코드를 볼 수도 있습니다. 그것은 심볼릭 링크가 해결 될 때 발생하는 모든 디렉토리의 보안을 분석합니다. readlink()
및 lstat()
및 stat()
을 사용합니다. 프로그램을 테스트 할 때 수표 중 하나가 realpath()
이 동일한 파일의 이름을 확인했는지 확인하는 것이 었습니다.
thanks! 이 IIUG Software Archive는 어디에 있습니까? – Ralph
@Corey : 현재 링크에있는 사이트에서 URL 인용 부호를 붙이면 URL 참조로 중화됩니다. –
어떤 플랫폼에서이 작업을 수행하고 있습니까? Windows에서는 Win32 코드와 관련이 있습니다. – Cheeso
나는 희미한 숙제 냄새를 감지합니까? (- : –
나는 리눅스를 운영하고있다. – Ralph