Baktığımızda lstat (2) kılavuz sayfasında bunu ENOENT dışındaki hatalar ile başarısız hale getirebileceğini durumlarda ilgili ilhama alabilirsiniz (dosya yok.)
En bariz olanı:
EACCES
Arama izni yolu öneki bölümündeki telefon için engellendi yolu .
Arama yapamayacağınız bir dizine ihtiyacınız var.
Evet, zaten sisteminizde olanı arayabilirsiniz (belki de /var/lib/private
varsa?) Ama aynı şeyi kendiniz de yaratabilirsiniz:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
Lstat (2) işlemi burada EACCES ile başarısız olacaktır. (Dizindeki tüm izinlerin kaldırılması bunu sağlar. Belki de o kadar çok ihtiyacınız yoktur ve chmod -x
yürütme izinlerini kaldırmanız yeterli olacaktır, çünkü bir dizindeki dosyalara erişmek için yürütme izinleri gerekir.)
Lstat (2) 'nin man sayfasına bakarak başarısız olmasının başka bir yaratıcı yolu daha var:
ENOTDIR
yolu öneki bir bileşeni yolunun bir dizin değil.
Bu nedenle, bir dosyaya erişmeye çalışmak /etc/passwd/nonexistent
, yine ENOENT'ten ("Böyle bir dosya veya dizin yok") farklı olan ve ihtiyaçlarınızı karşılayabilecek bu hatayı tetiklemelidir.
Bir diğeri:
ENAMETOOLONG
yolu çok uzun.
Ancak bunun için gerçekten uzun bir isme ihtiyacınız olabilir (Sanırım 4.096 bayt tipik sınırdır, ancak sisteminizin / dosya sisteminizin daha uzun bir adı olabilir.)
Son olarak, bunlardan herhangi birinin sizin için gerçekten yararlı olup olmayacağını söylemek zor . "Dosya mevcut değil" senaryosunu tetiklemeyen bir şey istediğinizi söylüyorsunuz. Tipik olarak bu bir ENOENT hatası anlamına gelse de, pratikte birçok üst düzey kontrol lstat (2) 'den gelen hataları "yok" olarak yorumlayacaktır. Örneğin test -e
veya [ -e ...]
kabuğun eşdeğeri , yukarıdakilerin tümünü yalnızca "yok" olarak yorumlayabilir, özellikle de farklı bir hata iletisi döndürmek için iyi bir yolu olmadığından ve bir hata döndürmemek dosyanın var olduğu anlamına gelir, bu kesinlikle böyle değil.
/etc/shadow