Nhìn vào trang man lstat (2), bạn có thể có được một chút cảm hứng về các trường hợp có thể khiến nó không thành công với các lỗi khác ngoài ENOENT (tệp không tồn tại.)
Rõ ràng nhất là:
EACCES Quyền
tìm kiếm bị từ chối đối với một trong các thư mục trong tiền tố đường dẫn của đường dẫn .
Vì vậy, bạn cần một thư mục bạn không thể tìm kiếm từ.
Có, bạn có thể tìm kiếm một cái đã có trong hệ thống của bạn (có lẽ /var/lib/private
nếu nó tồn tại?) Nhưng bạn cũng có thể tự tạo một cái, với tương đương:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
Hoạt động lstat (2) sẽ thất bại với EACCES tại đây. (Xóa tất cả các quyền khỏi thư mục đảm bảo rằng. Có lẽ bạn thậm chí không cần nhiều như vậy và chmod -x
loại bỏ các quyền thực thi là đủ, vì các quyền thực thi trên một thư mục là cần thiết để truy cập các tệp trong đó.)
Có một cách sáng tạo khác để làm cho lstat (2) thất bại, nhìn vào trang người đàn ông của nó:
ENOTDIR
Một thành phần của tiền tố đường dẫn của đường dẫn không phải là một thư mục.
Vì vậy, cố gắng truy cập một tệp như /etc/passwd/nonexistent
sẽ gây ra lỗi này, một lần nữa khác với ENOENT ("Không có tệp hoặc thư mục như vậy") và có thể phù hợp với nhu cầu của bạn.
Một số khác là:
Con
đường ENAMETOOLONG quá dài.
Nhưng bạn có thể cần một cái tên thực sự dài cho cái này (tôi tin rằng 4.096 byte là giới hạn điển hình, nhưng hệ thống / hệ thống tệp của bạn có thể có tên dài hơn.)
Cuối cùng, thật khó để biết liệu bất kỳ thứ nào trong số này sẽ thực sự hữu ích cho bạn. Bạn nói rằng bạn muốn một cái gì đó không kích hoạt kịch bản "tập tin không tồn tại". Mặc dù thông thường có nghĩa là lỗi ENOENT, trong thực tế, nhiều kiểm tra cấp cao hơn sẽ đơn giản diễn giải bất kỳ lỗi nào từ lstat (2) là "không tồn tại". Ví dụ test -e
hoặc tương đương [ -e ...]
từ shell có thể chỉ đơn giản là diễn giải tất cả các điều trên là "không tồn tại", đặc biệt vì nó không có cách nào tốt để trả về một thông báo lỗi khác và không trả về lỗi sẽ ám chỉ tệp tồn tại, đó là điều chắc chắn nhất
/etc/shadow