ศัพท์เทคนิคสำหรับไดเรกทอรี (.) ปัจจุบันและ parent (.. ) คืออะไร


20

ผมได้ฟังก์ชั่นที่ตรวจสอบไม่ว่าจะผ่านในชื่อไฟล์เป็นหรือ. ..แต่ฉันไม่รู้วิธีตั้งชื่อให้ถูกต้อง บางสิ่งที่คล้ายกันIsCurrentOrParentDirectory()นั้นไม่ชัดเจนเนื่องจากฟังก์ชันใช้ชื่อไฟล์ไม่ใช่พา ธ เต็ม (โดยสังเขปเพื่อนร่วมโปรแกรมจะคาดหวังว่าจะผ่าน/usr/ในขณะที่ฉันกำลัง/usr/จะกลับมาtrueในขณะที่นี่ไม่ใช่กรณี)

มีคำศัพท์ทางเทคนิคสำหรับรายการไดเรกทอรีเหล่านี้หรือไม่ หากมีสิ่งหนึ่งมันคืออะไร?


1
. และ .. ไม่ใช่ชื่อไฟล์เลย แต่เป็นโฟลเดอร์ ทำไมคุณไม่ตรวจสอบดูว่าอินพุตเป็นไฟล์ที่ถูกต้องหรือไม่ (พิมพ์ตาม stat () คือ IF_REG) ป.ล. นี้น่าจะเหมาะกับ StackOverflow มากขึ้น
Tonny

7
@Tonny .และ.. เป็นชื่อไฟล์ตามมาตรฐาน POSIX ดูคำพูดของฉันด้านล่าง ฉันจะบอกว่ามันดีที่นี่เพราะมันเกี่ยวกับแนวคิดการคำนวณทั่วไป
slhck

ฉันต้องยอมรับว่าถ้อยคำของฉันไม่ชัดเจนอีกครั้ง ฟังก์ชั่นใช้ไฟล์เดียวหรือชื่อไดเรกทอรี ( foo.bar, foo, ... ) แต่ไม่เส้นทาง ( foo/bar, /foo/, ... ) แต่เนื่องจากไดเรกทอรีลิงก์ ฯลฯ เป็นไฟล์ด้วยฉันจะปล่อยให้มันเป็นอย่างนั้น
Max Truxa

@slhck POSIX เรียกว่าไฟล์ แต่จะทำเช่นนั้นสำหรับวัตถุระบบไฟล์ใด ๆ ไฟล์ในคำศัพท์ POSIX ควรอ่านเป็นตัวย่อของ "วัตถุระบบไฟล์" ในช่วงต้นระบบปฏิบัติการ Unix และเป็นรุ่นที่ใช้ FSO ทั้งหมดซึ่งเป็นไฟล์จริง ๆ แต่ก็ไม่เป็นความจริงสำหรับการใช้งานที่ทันสมัยบางอย่างและไม่ใช่สำหรับ Unix ที่ไม่ใช่ Unix แต่เป็นระบบปฏิบัติการที่สอดคล้องกับ POSIX (Windows NT เป็นตัวอย่างที่ชัดเจนที่สุด) - ฉันอาจจะเขียนว่า "เป็นไฟล์ปกติ" แทน "ไฟล์ที่ถูกต้อง" ในความคิดเห็นของฉัน แต่ความคิดเห็นของ Max Truxa ทำให้มันเป็นจุดที่สงสัยอยู่แล้ว
Tonny

คำตอบ:


23

จากมาตรฐาน POSIX :

จุดชื่อไฟล์พิเศษจะอ้างถึงไดเรกทอรีที่ระบุโดยรุ่นก่อน ชื่อไฟล์พิเศษ dot-dot ให้อ้างถึงไดเรคทอรี่หลักของไดเร็กตอรี่รุ่นก่อน เป็นกรณีพิเศษในไดเรกทอรีรูทจุด - จุดอาจหมายถึงไดเรกทอรีรากเอง

ดังนั้นจริงๆถ้าคุณต้องการตรวจสอบว่าชื่อไฟล์เป็น.หรือ..คุณจะต้องเรียกมันIsDotOrDotDot()หรือใช้ POSIX คำศัพท์ของการแก้ไขชื่อพา ธIsPredecessorOrParentOfPredecessor()หรือแม้กระทั่งPointsToPredecessorOrParentOfPrecedessor()... คุณได้รับความคิด ปัญหาคือคำศัพท์เฉพาะหลังนั้นสมเหตุสมผลเมื่อดูที่ชื่อพา ธ เต็ม แต่ก็ไม่มีใครเข้าใจว่า

เมื่อพิจารณาแล้ว.และ..เป็นชื่อไฟล์ที่ถูกต้อง (เพิ่งตีความแตกต่างกัน) คุณควรยึดติดกับสิ่งที่คุณมีโดยอาศัยความหมายมากกว่าที่จะเรียกว่าภายใน


คือ.bash_historydot dot หรือไม่? ฉันไม่แน่ใจว่าชื่อฟังก์ชั่นนั้นมีความหมายมากกว่าการเปิด OP ที่เสนอหรือไม่
Jens Erat

@JensErat นั่นไม่เกี่ยวข้องกับปัญหา คำถามก็คือว่าองค์ประกอบชื่อไฟล์เป็น.หรือไม่ว่ามันเป็นเพียงแค่เริ่มต้นด้วย.. .แน่นอนว่าชื่อฟังก์ชั่นของ OP นั้นมีความหมายมากกว่า ฉันแค่ชี้ให้เขาดูว่ามันถูกอ้างถึงทางเทคนิคอย่างไร
slhck

2
แน่นอน แต่ไม่ได้IsDotOrDotDot()พูดอะไรเกี่ยวกับสิ่งที่ฟังก์ชั่นทำอยู่เลย
Jens Erat

"บรรพบุรุษ" หมายถึงองค์ประกอบของเส้นทางทันทีก่อนที่จะอยู่ในข้อกำหนดของเส้นทาง หากคุณเพียงแค่ดูชื่อของรายการในไดเรกทอรี "ปัจจุบัน" หรือ "ผู้ปกครอง" เป็นศัพท์ที่ดีกว่า
Simon Richter

2
@JensErat IsDotOrDotDotผมจะใช้ ใครก็ตามที่มีความรู้เกี่ยวกับแนวคิดระบบไฟล์จะเข้าใจได้ทันที เป็นที่ถกเถียงกันว่า.bash_history"จุด" เพราะไม่มีบริบทให้ความหมายของ "จุด" แต่มันไม่แน่นอน "จุดหรือจุดจุด"
kinokijuf

4

.และมักจะใช้ในการอธิบายทางญาติกับคนที่แน่นอนเช่น.. ฉันต้องการใช้ความแตกต่างนี้และประกาศฟังก์ชั่นเป็น/usrIsRelativeCurrentOrParentDirectory()

ระวังการอ้างอิงจุดอาจเกิดขึ้นได้ทุกที่ในเส้นทาง เกี่ยวกับ/usr/local/..อะไร


ฉันไม่สามารถชี้ให้เห็นได้ว่าฟังก์ชั่นนี้ใช้ชื่อไฟล์เท่านั้นและไม่ใช่เส้นทางแบบเต็ม ฉันอัปเดตคำถามตาม
Max Truxa

2

POSIX Standard ซึ่ง slhck ♦เสนอราคาอย่างมีประโยชน์กล่าวว่า

จุดชื่อไฟล์พิเศษจะอ้างถึง….  ชื่อไฟล์พิเศษ dot-dotจะอ้างถึง….

(เน้นที่เพิ่ม) ดังนั้นในขณะที่ไม่ใช่เทคนิคอย่างแน่นอนดูเหมือนว่า "ชื่อไฟล์พิเศษ" เพียงอาจเป็นชื่ออย่างเป็นทางการ ผู้ใช้ของคุณอาจจะเข้าใจมันถ้าคุณเรียกว่าฟังก์ชั่นของคุณใด ๆ ต่อไปนี้: IsSpecialDirectory(), หรือเพียงแค่IsSpecialFilename()IsSpecialName()

หรือคุณอาจจะไปกับIsStandardDirectory(), หรือIsStandardFilename() IsStandardName()สิ่งนี้เป็นไปตามหลักการตั้งชื่อ Unix (อินพุตมาตรฐานเอาต์พุตมาตรฐาน) สำหรับสิ่งต่าง ๆ ที่สร้างขึ้นสำหรับคุณโดยอัตโนมัติ (ในกรณีนี้โดยmkfsและmkdirIsAutomatic…()หรือIsDefault…()ในทางกลับกันอาจไม่ง่ายพอ


อันที่จริงชื่อแรกที่ฉันได้รับIsMagicDirectory()นั้นค่อนข้างใกล้เคียงกับชื่อนั้นมาก แต่ฉันคิดว่าถ้อยคำของคุณนั้นง่ายกว่าและเหมาะสมกว่า การใช้IsSpecialFileNameจะทำให้ชัดเจนว่าฟังก์ชั่นไม่ได้รับเส้นทาง แต่เป็นชื่อไฟล์เดียว (หรือไดเรกทอรีลิงก์ ฯลฯ )
Max Truxa

คำแนะนำที่ดี "พิเศษ" อย่างไรก็ตามอาจรวมถึงลิงก์ FIFO ฯลฯ ด้วยใช่ไหม
slhck

@slhck: ใช่อุปกรณ์ (เช่นดิสก์และ ttys) เรียกว่า "ไฟล์พิเศษ" และใช่คำศัพท์นี้สามารถนำไปใช้กับลิงก์สัญลักษณ์ FIFO และผู้ที่อยู่อาศัยแปลกใหม่อื่น ๆ ของระบบไฟล์ - ไฟล์ประเภทใด ๆ (i-node) นอกเหนือจาก“ ไฟล์ปกติ” (ใช่ไดเรกทอรีตกอยู่ในที่ฝากข้อมูลนี้ด้วย) ดังนั้นIsSpecialFile()จะเป็นคำแนะนำที่ไม่ดี แต่ฉันไม่ได้แนะนำสิ่งนั้น IsSpecialFilename()ผมแนะนำ ในขณะที่ชื่อsda1, console, kmem, myfifoและurandomมีการชี้นำพวกเขาจะไม่สงวนไว้และไม่ได้พิเศษโดยเนื้อแท้ แต่.และ..มีความพิเศษโดยเนื้อแท้ชื่อไฟล์
สกอตต์

1

คำศัพท์เดียวที่ฉันรู้จักจาก * nix world คือCWDสำหรับ Working Working Directory ที่จริงแล้วค่อนข้างใช้บ่อย ดูตัวอย่าง/proc/$$/cwdซึ่งเป็นลิงค์ไปยังไดเรกทอรีที่คุณเรียกใช้คำสั่ง

ฉันไม่รู้ชื่อมาตรฐานใด ๆ..นอกเหนือจากdot-dotและ @slhck ชี้ให้เห็นว่านั่นไม่ใช่ตัวเลือกที่ดี


0

Posix ค่อนข้างคลุมเครือในการพูดเกี่ยวกับความสัมพันธ์ระหว่างไดเรกทอรีแม่และลูก อย่างที่คนอื่น ๆ พูด./ ..ไม่เป็นประโยชน์ในขณะที่พูดหรือสื่อสารกับมนุษย์คนอื่น

โครงสร้างไฟล์สามารถถูกพิจารณาเป็นโครงสร้างข้อมูลทรี ที่นี่โดยทั่วไป "พ่อแม่" และ "ลูก" หรือ "ลูกสาว" ก็เพียงพอที่จะถ่ายทอดความหมาย คุณจะเห็นตำราโครงสร้างข้อมูลดำเนินการประชุมนี้

อีกวิธีหนึ่งดูเหมือนว่าต้นไม้สามารถพูดคุยเป็น "ขึ้น" และ "ลง" ต้นไม้ โดยการประชุม "up" หมายถึงใกล้ไดเรกทอรีรากและ "ลง" หมายถึงเด็ก (ren)

ฉันคิดว่าอย่างใดอย่างหนึ่งIsCurrentOrUp()หรือIsCurrentOrParent()สามารถโต้เถียงที่จะปฏิบัติที่ดีสำหรับฟังก์ชั่นการตั้งชื่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.