Lstat को देखते हुए (2) आदमी पेज आप मामलों है कि यह ENOENT के अलावा अन्य त्रुटियों के साथ असफल हो सकता है पर कुछ प्रेरणा प्राप्त कर सकते हैं (फ़ाइल मौजूद नहीं है।)
सबसे स्पष्ट एक है:
EACCES
खोज अनुमति पथ के उपसर्ग में निर्देशिकाओं में से किसी एक के लिए अस्वीकृत है ।
इसलिए आपको एक निर्देशिका की आवश्यकता है जिसे आप खोज नहीं सकते हैं।
हां, आप अपने सिस्टम में पहले से मौजूद एक चीज़ की तलाश कर सकते हैं (शायद /var/lib/private
अगर यह मौजूद है?) लेकिन आप समान के साथ खुद को भी बना सकते हैं:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
यहाँ LACAT (2) ऑपरेशन EACCES से विफल हो जाएगा। (निर्देशिका से सभी अनुमतियों को हटाने से यह सुनिश्चित हो जाता है। हो सकता है कि आपको इसकी आवश्यकता भी न हो औरchmod -x
निष्पादन अनुमतियों को हटाना पर्याप्त होगा, क्योंकि इसके तहत फ़ाइलों तक पहुंचने के लिए किसी निर्देशिका पर अनुमतियों को निष्पादित करना आवश्यक है।)
Lstat (2) को विफल करने का एक और रचनात्मक तरीका है, इसके मैन पेज को देखना:
ENOTDIR
के पथ का प्रारंभिक भाग के एक घटक पथ एक निर्देशिका नहीं है।
तो, जैसे कि एक फ़ाइल का उपयोग करने की कोशिश कर रहा है /etc/passwd/nonexistent
इस तरह की त्रुटि को ट्रिगर करना चाहिए, जो फिर से ENOENT ("ऐसी कोई फ़ाइल या निर्देशिका नहीं") से अलग है और आपकी आवश्यकताओं के अनुरूप हो सकता है।
एक और है:
ENAMETOOLONG का
रास्ता बहुत लंबा है।
लेकिन आपको इस एक के लिए वास्तव में लंबे नाम की आवश्यकता हो सकती है (मेरा मानना है कि 4,096 बाइट्स विशिष्ट सीमा है, लेकिन आपके सिस्टम / फाइल सिस्टम में एक लंबा समय हो सकता है।)
अंत में, यह बताना मुश्किल है कि इनमें से कोई भी वास्तव में आपके लिए उपयोगी होगा । आप कहते हैं कि आप ऐसा कुछ चाहते हैं जो "फ़ाइल मौजूद नहीं है" परिदृश्य को ट्रिगर न करे। जबकि आमतौर पर इसका मतलब है कि एक त्रुटि, व्यवहार में कई उच्च-स्तरीय जाँचें केवल lstat (2) से किसी भी त्रुटि की व्याख्या करेंगी क्योंकि "मौजूद नहीं है"। उदाहरण के लिए test -e
या [ -e ...]
शेल से समतुल्य बस उपरोक्त सभी की व्याख्या "अस्तित्व में नहीं है" के रूप में हो सकती है, खासकर जब से यह एक अलग त्रुटि संदेश वापस करने का एक अच्छा तरीका नहीं है और एक त्रुटि नहीं लौटने से फ़ाइल मौजूद होगी। जो निश्चित रूप से ऐसा नहीं है।
/etc/shadow