การดูหน้าคนlstat (2)คุณสามารถรับแรงบันดาลใจในบางกรณีที่อาจทำให้มันล้มเหลวโดยมีข้อผิดพลาดนอกเหนือจาก ENOENT (ไฟล์ไม่มีอยู่)
สิ่งที่ชัดเจนที่สุดคือ:
EACCES
ค้นหาได้รับอนุญาตถูกปฏิเสธสำหรับหนึ่งในไดเรกทอรีในคำนำหน้าเส้นทางของเส้นทาง
ดังนั้นคุณต้องการไดเรกทอรีที่คุณไม่สามารถค้นหาได้
ใช่คุณสามารถค้นหาสิ่งที่มีอยู่แล้วในระบบของคุณ (อาจเป็น/var/lib/private
ถ้ามีอยู่แล้ว) แต่คุณก็สามารถสร้างตัวเองขึ้นมาได้ด้วยเทียบเท่ากับ:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
การดำเนินการ lstat (2) จะล้มเหลวด้วย EACCES ที่นี่ (การลบสิทธิ์ทั้งหมดออกจากไดเรกทอรีช่วยให้มั่นใจได้ว่าคุณอาจไม่ต้องการจำนวนมากและchmod -x
การลบการอนุญาตให้ใช้งานก็เพียงพอแล้วเนื่องจากจำเป็นต้องใช้สิทธิ์ในการเรียกใช้ไดเรกทอรีเพื่อเข้าถึงไฟล์ที่อยู่ด้านล่าง)
มีอีกวิธีที่สร้างสรรค์ในการทำให้ lstat (2) ล้มเหลวโดยดูที่หน้าคู่มือ:
ENOTDIR
ส่วนประกอบของคำนำหน้าเส้นทางของเส้นทางไม่ใช่ไดเรกทอรี
ดังนั้นการพยายามเข้าถึงไฟล์เช่น/etc/passwd/nonexistent
ควรทริกเกอร์ข้อผิดพลาดนี้ซึ่งแตกต่างจาก ENOENT ("ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว") และอาจเหมาะสมกับความต้องการของคุณ
อีกหนึ่งคือ:
เส้นทางENAMETOOLONGยาวเกินไป
แต่คุณอาจต้องการชื่อยาวมากสำหรับอันนี้ (ฉันเชื่อว่า 4,096 ไบต์เป็นขีด จำกัด ปกติ แต่ระบบ / ระบบไฟล์ของคุณอาจมีชื่อยาวกว่านี้)
สุดท้ายมันยากที่จะบอกได้ว่าสิ่งเหล่านี้จะเป็นจริงมีประโยชน์สำหรับคุณ คุณบอกว่าคุณต้องการบางสิ่งบางอย่างที่ไม่ก่อให้เกิดสถานการณ์ "ไม่มีไฟล์" แม้ว่าโดยทั่วไปแล้วจะหมายถึงข้อผิดพลาด ENOENT แต่ในทางปฏิบัติการตรวจสอบระดับสูงขึ้นจำนวนมากจะตีความข้อผิดพลาดใด ๆ จาก lstat (2) ว่า "ไม่มีอยู่" ตัวอย่างเช่นtest -e
หรือเทียบเท่า[ -e ...]
จากเปลือกอาจเพียงแค่ตีความทั้งหมดข้างต้นเป็น "ไม่มีอยู่" โดยเฉพาะอย่างยิ่งเนื่องจากมันไม่มีวิธีที่ดีในการส่งคืนข้อความแสดงข้อผิดพลาดที่แตกต่างกันและไม่ส่งคืนข้อผิดพลาดจะบ่งบอกถึงไฟล์ที่มีอยู่ ซึ่งแน่นอนที่สุดไม่ใช่กรณี
/etc/shadow