Apa istilah teknis untuk direktori saat ini (.) Dan orang tua (..)?

20

Saya mendapat fungsi yang memeriksa apakah nama file yang dikirimkan adalah .atau ... Tapi saya tidak tahu bagaimana cara menamainya dengan benar. Sesuatu seperti IsCurrentOrParentDirectory()ambigu, karena fungsinya mengambil nama file dan bukan path lengkap. (Secara intuitif sesama programmer akan berharap lulus /usr/sementara saya masuk /usr/akan kembali true, sementara ini sebenarnya tidak demikian.)

Apakah ada istilah teknis untuk entri direktori ini? Jika ada, apa itu?

Max Truxa
sumber
1
. dan .. BUKAN nama file sama sekali, tetapi folder. Mengapa Anda tidak memeriksa apakah inputnya adalah file yang valid (ketik menurut stat () adalah IF_REG)? PS Ini mungkin lebih cocok untuk StackOverflow
Tonny
7
@Tonny .dan .. yang nama file sesuai dengan standar POSIX. Lihat kutipan saya di bawah ini. Saya akan mengatakan itu baik-baik saja di sini karena ini tentang konsep komputasi umum.
slhck
Saya harus mengakui bahwa kata-kata saya tidak jelas lagi. Fungsi mengambil file tunggal atau nama direktori ( foo.bar, foo, ...) tapi tidak jalan ( foo/bar, /foo/, ...). Tetapi karena direktori, tautan, dll adalah file juga, saya akan membiarkannya seperti itu.
Max Truxa
@slhck POSIX menyebutnya file, tetapi melakukan itu untuk objek sistem file APA PUN. File dalam terminologi POSIX biasanya harus dibaca sebagai singkatan dari "file system object". Pada awal Unix dan itu merupakan turunan dari semua FSO di mana memang benar-benar file, tetapi itu tidak berlaku untuk beberapa implementasi modern dan tentu saja bukan untuk non-Unix, tetapi Sistem Operasi yang sesuai dengan POSIX (Windows NT sebagai contoh paling jelas). - Saya mungkin seharusnya menulis "adalah file biasa" bukan "file yang valid" dalam komentar saya, tetapi komentar Max Truxa menjadikannya sebagai poin yang bisa diperdebatkan.
Tonny

Jawaban:

23

Dari standar POSIX :

Titik nama file khusus akan merujuk ke direktori yang ditentukan oleh pendahulunya. Nama file dot-dot khusus akan merujuk ke direktori induk dari direktori pendahulunya. Sebagai kasus khusus, di direktori root, dot-dot dapat merujuk ke direktori root itu sendiri.

Jadi, sungguh, jika Anda ingin memeriksa apakah nama file itu .atau ..Anda harus menyebutnya IsDotOrDotDot(), atau, menggunakan terminologi POSIX dari resolusi pathname IsPredecessorOrParentOfPredecessor(),, atau bahkan mungkin PointsToPredecessorOrParentOfPrecedessor()... Anda mendapatkan idenya. Masalahnya adalah bahwa terminologi terakhir hanya masuk akal ketika melihat nama path lengkap. Tapi toh tidak ada yang akan mengerti itu.

Mempertimbangkan hal itu .dan ..merupakan nama file yang valid (hanya ditafsirkan berbeda), Anda harus tetap berpegang pada apa yang Anda miliki, bergantung pada artinya daripada bagaimana mereka disebut secara internal.

slhck
sumber
Apakah .bash_historydot atau bukan dot? Saya tidak yakin apakah nama fungsi itu lebih deskriptif daripada open OP yang diajukan.
Jens Erat
@ JensErat Itu tidak relevan dengan masalah. Pertanyaannya adalah apakah komponen nama file adalah .atau .., dan bukan apakah itu baru saja dimulai dengan a .. Tentu saja nama fungsi OP lebih deskriptif; Saya baru saja mengarahkannya ke bagaimana itu disebut secara teknis.
slhck
2
Tentu saja, tetapi tidak IsDotOrDotDot()mengatakan apa-apa tentang fungsi ini.
Jens Erat
"pendahulunya" merujuk ke elemen path segera sebelum itu dalam spesifikasi path. Jika Anda hanya melihat nama entri dalam direktori, "saat ini" atau "induk" adalah terminologi yang lebih baik.
Simon Richter
2
@JensErat, saya akan gunakan IsDotOrDotDot. Siapa pun yang berpengetahuan luas dengan konsep sistem file akan langsung memahaminya. Dapat diperdebatkan apakah .bash_history"dot" karena tidak ada konteks yang disediakan kemudian untuk arti "dot", tetapi jelas BUKAN "dot atau dot dot".
kinokijuf
4

.dan ..biasanya digunakan untuk menggambarkan jalur relatif vs yang absolut suka /usr. Saya akan menggunakan perbedaan ini dan menyatakan fungsinya sebagai IsRelativeCurrentOrParentDirectory().

Waspadai dot-referensi dapat terjadi di mana saja di jalan. Bagaimana dengan /usr/local/..?

Jens Erat
sumber
Saya gagal menunjukkan bahwa fungsi hanya mengambil nama file dan bukan path lengkap. Saya memperbarui pertanyaan sesuai.
Max Truxa
2

Standar POSIX, yang biasanya dikutip, mengatakan,

Titik nama file khusus akan merujuk ke ....  Nama file dot-dot khusus akan merujuk ke ....

(penekanan ditambahkan). Jadi, sementara itu tidak terlalu teknis , sepertinya "nama file khusus" mungkin hanya nama resmi . Pengguna Anda mungkin akan mengerti jika Anda disebut fungsi Anda salah satu dari berikut: IsSpecialDirectory(), IsSpecialFilename(), atau hanya IsSpecialName().

Atau Anda bisa pergi dengan IsStandardDirectory(), IsStandardFilename()atau IsStandardName(). Ini mengikuti konvensi penamaan Unix (input standar, output standar) untuk hal-hal yang ditetapkan untuk Anda secara otomatis (dalam hal ini, oleh mkfsdan mkdir).  IsAutomatic…()atau IsDefault…(), di sisi lain, mungkin tidak cukup intuitif.

Scott
sumber
Sebenarnya nama pertama yang saya ambil IsMagicDirectory()sangat dekat dengan itu, tapi saya pikir kata-kata Anda jauh lebih intuitif dan tepat (terutama karena menggunakan konvensi penamaan yang mapan). Menggunakan IsSpecialFileNamebahkan akan memperjelas bahwa fungsi tersebut tidak menerima jalur tetapi satu file (atau direktori, tautan, dll) nama.
Max Truxa
Saran yang bagus "Khusus" namun mungkin juga akan menyertakan tautan, FIFO, dll., Kan?
slhck
Sslhck: Ya, perangkat (misalnya, disk dan ttys) disebut "file khusus". Dan, ya, istilah ini dapat diterapkan secara longgar pada tautan simbolik, FIFOs, dan penghuni eksotis lainnya dari sistem file - semua jenis file (i-node) selain dari "file biasa". (Ya, direktori juga termasuk dalam ember ini.) Jadi IsSpecialFile()itu adalah saran yang buruk. Tapi saya tidak menyarankan itu; Saya menyarankan IsSpecialFilename(). Sementara nama-nama sda1, console, kmem, myfifodan urandomyang sugestif, mereka tidak dilindungi dan tidak inheren khusus. Tapi .dan ..secara inheren nama file khusus .
Scott
1

Satu-satunya istilah yang saya tahu dari dunia * nix adalah CWDuntuk Direktori Kerja Saat Ini. Itu sebenarnya cukup sering digunakan. Lihat, misalnya /proc/$$/cwdyang merupakan tautan ke direktori tempat Anda menjalankan perintah.

Saya tidak tahu nama standar ..selain dot-dotdan sebagai @slhck menunjukkan itu bukan pilihan yang baik.

terdon
sumber
0

Posix cukup ambigu berbicara tentang hubungan direktori orangtua-anak. Seperti orang lain berkata, ./ ..tidak membantu saat berbicara atau berkomunikasi dengan manusia lainnya.

Struktur file dapat dianggap sebagai struktur data pohon. Di sini, umumnya "orang tua" dan "anak" atau "anak perempuan" cukup untuk menyampaikan makna. Anda akan melihat buku teks struktur data membawa konvensi ini

Atau, sepertinya pohon dapat dibicarakan sebagai "atas" dan "turun" pohon. Dengan konvensi, "naik" berarti lebih dekat ke direktori root, dan "turun" mengacu pada anak (ren).

Saya pikir salah satu IsCurrentOrUp()atau IsCurrentOrParent()dapat dikatakan sebagai praktik yang baik untuk fungsi penamaan.

CodeOcelot
sumber