จาก คนที่ 3 เส้นทางจริง
:
หากไม่มีข้อผิดพลาด realpath() จะส่งคืนตัวชี้ไปยัง modified_path
จาก ชาย 3 ผิด
:
ค่าใน errno มีความสำคัญเฉพาะเมื่อค่าส่งคืนของการโทรระบุข้อผิดพลาด (เช่น -1 จากการเรียกระบบส่วนใหญ่ -1 หรือ NULL จากฟังก์ชันไลบรารีส่วนใหญ่) ฟังก์ชันที่ทำสำเร็จได้รับอนุญาตให้เปลี่ยน errno
ดังนั้นจึงไม่มีข้อผิดพลาดและค่าของ เอ่อ
เป็นทางการ ไม่ได้กำหนด.
ค่าจริงที่ส่งกลับเป็นรายละเอียดภายในซึ่งถูกนำมาใช้แตกต่างกันในอดีต ขณะนี้ (21.10) น เอ่อ
เป็นของเหลือจาก เส้นทางจริง
ภายในพยายามติดตามลิงก์สัญลักษณ์บนส่วนประกอบพาธซึ่งไม่ใช่ในกรณีนี้
คุณสามารถดูสิ่งนี้ได้ดีที่สุดโดยการทำ dummy.c
เป็นลิงก์สัญลักษณ์ไปยังไฟล์ เป้าหมาย.ค
แล้ววิ่ง strace./a.out
เพื่อติดตามการเรียกเคอร์เนลของ linux โดยเฉพาะสาย:
readlink("/home/sachin/new-CDM", 0x7ffee6b57960, 1023) = -1 EINVAL (อาร์กิวเมนต์ไม่ถูกต้อง)
readlink("/home/sachin/new-CDM/dummy.c", "target.c", 1023) = 8
readlink("/home/sachin/new-CDM/target.c", 0x7ffee6b57960, 1023) = -1 EINVAL (อาร์กิวเมนต์ไม่ถูกต้อง)
ที่โทรไป อ่านลิงค์
ด้วยคอมโพเนนต์พาธที่ไม่ใช่สัญลักษณ์ล้มเหลว และมีการเปลี่ยนแปลง เอ่อ
เป็น "EINVAL (อาร์กิวเมนต์ไม่ถูกต้อง)"
ที่ผ่านมา (20.04) อ่านลิงค์
ถูกเรียกหลังจากการตรวจสอบเพิ่มเติมว่าส่วนประกอบนั้นเป็นลิงค์ด้วยเท่านั้น ลสแตท
จึงรักษาคุณค่าของ เอ่อ
.
lstat("/home/sachin/new-CDM", {st_mode=S_IFDIR|0775, st_size=20, ...}) = 0
lstat("/home/sachin/new-CDM/dummy.c", {st_mode=S_IFLNK|0777, st_size=8, ...}) = 0
readlink("/home/sachin/new-CDM/dummy.c", "target.c", 4095) = 8
lstat("/home/sachin/new-CDM/target.c", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
ดังนั้นการเปลี่ยนแปลงนี้น่าจะเป็นการเพิ่มประสิทธิภาพซึ่งมีผลข้างเคียงกับค่าเฉพาะในกรณีที่คุณไม่ควรเพิกเฉย
อนึ่ง การพิมพ์ของคุณ บัฟ
ที่นี่ไม่มีจุดหมายเพราะเห็นได้ชัดว่ายังคงเป็นโมฆะ หากสิ่งนี้ทำให้คุณประหลาดใจ คุณควรคิดว่าทำไม