상기 찾고 lstat는 (2) 맨 페이지 당신은 ENOENT 이외의 오류와 함께 실패 할 수있는 경우에 어떤 영감을 얻을 수 있습니다 (파일이 존재하지 않습니다.)
가장 확실한 것은 :
EACCES
검색 권한의 경로 접두사에있는 디렉토리 중 하나에 대한 거부 경로 .
따라서 검색 할 수없는 디렉토리가 필요합니다.
예, 이미 시스템에있는 것을 찾을 수 있습니다 (아마있을 /var/lib/private
경우?). 그러나 다음과 같은 방법으로 직접 만들 수도 있습니다.
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
EACCES와 함께 lstat (2) 작업이 실패합니다. (디렉토리에서 모든 권한을 제거하면이를 보장 chmod -x
할 수 있습니다. 디렉토리에있는 파일에 액세스하려면 디렉토리에 대한 실행 권한이 필요하므로 그다지 필요하지 않고 실행 권한을 제거하면 충분합니다.)
매뉴얼 페이지를 보면 lstat (2)가 실패하게 만드는 또 다른 창의적인 방법이 있습니다.
ENOTDIR
의 경로 접두어의 구성 요소 경로가 디렉토리가 아니다.
따라서 파일에 액세스하려고하면 /etc/passwd/nonexistent
이 오류가 발생합니다.이 오류는 다시 ENOENT와 다르며 ( "No such file or directory") 사용자 요구에 맞을 수 있습니다.
다른 하나는 다음과 같습니다.
ENAMETOOLONG
경로 가 너무 깁니다.
그러나이 이름에 대해 정말로 긴 이름이 필요할 수 있습니다 (일반적으로 4,096 바이트가 제한되지만 시스템 / 파일 시스템에는 더 긴 이름이있을 수 있습니다).
마지막으로, 이것들 중 어느 것이 실제로 당신에게 유용한 지 말하기는 어렵습니다 . "파일이 존재하지 않습니다"시나리오를 트리거하지 않는 것을 원한다고 말합니다. 일반적으로 이는 ENOENT 오류를 의미하지만 실제로는 많은 상위 수준 검사에서 lstat (2)의 오류가 "존재하지 않음"으로 해석됩니다. 예를 들어 쉘 test -e
에서 이에 해당 [ -e ...]
하는 것은 단순히 위의 모든 것을 "존재하지 않음"으로 해석 할 수 있습니다. 특히 다른 오류 메시지를 리턴하는 좋은 방법이없고 오류를 리턴하지 않으면 파일이 존재한다는 것을 의미하므로, 가장 확실한 경우는 아닙니다.
/etc/shadow