Який технічний термін для поточного (.) Та батьківського (..) каталогу?


20

Я отримав функцію, яка перевіряє, чи передано ім'я файлу, .чи ... Але я не знаю, як це правильно назвати. Щось подібне IsCurrentOrParentDirectory()є неоднозначним, оскільки функція займає ім’я файлу, а не повний шлях. (Інтуїтивно інший програміст розраховував би, що /usr/я пройду, поки я /usr/повернусь true, хоча це насправді не так.)

Чи є технічний термін для цих записів каталогів? Якщо є, що це?


1
. і .. НЕ є іменами файлів, а папками. Чому ви просто не перевірите, чи введений файл є дійсним (тип відповідно до stat () - IF_REG)? PS Це, мабуть, більше підходить StackOverflow
Tonny

7
@Tonny .і .. є назви файлів відповідно до стандарту POSIX. Дивіться мою цитату нижче. Я б сказав, що це нормально, оскільки йдеться про загальні обчислювальні поняття.
slhck

Мушу визнати, що моє формулювання знову було неоднозначним. Функція приймає один ім'я файлу або каталогу ( foo.bar, foo, ...) , але не шлях ( foo/bar, /foo/, ...). Але оскільки каталоги, посилання тощо є файлами, я залишаю це так.
Макс Трукса

@slhck POSIX називає його файлом, але робить це для будь-якого об'єкта файлової системи. Файл у термінології POSIX зазвичай слід читати як абревіатуру "об'єкт файлової системи". На початку Unix і він виводить усі файли FSO, де насправді є файли, але це не вірно для деяких сучасних реалізацій і, звичайно, не для Unix, але сумісних з POSIX операційних систем (Windows NT як найбільш очевидний приклад). - Я, мабуть, повинен був написати "звичайний файл" замість "дійсний файл" у своєму коментарі, але коментар Макса Трукса все одно робить його суперечливим.
Тонні

Відповіді:


23

Із стандарту POSIX :

Спеціальна крапка імені файлу повинна посилатися на каталог, визначений його попередником. Спеціальна назва файлу dot-dot має посилатися на батьківський каталог попереднього каталогу. Як особливий випадок, у кореневому каталозі точка-крапка може посилатися на сам кореневий каталог.

Тож дійсно, якщо ви хочете перевірити, чи є ім'я файлу, .або ..вам доведеться його назвати IsDotOrDotDot(), або, використовуючи POSIX термінологію роздільної здатності імені IsPredecessorOrParentOfPredecessor(), або, можливо, навіть PointsToPredecessorOrParentOfPrecedessor()… ви отримуєте ідею. Проблема полягає в тому, що остання термінологія має сенс лише при перегляді повних імен. Але ніхто так і не зрозумів би.

З огляду на , що .і ..є дійсними іменами файлів (тільки інтерпретований по- різному), ви повинні просто дотримуватися того , що у вас є, спираючись на зміст , а не як вони називаються внутрішньо.


Є .bash_historyточка чи ні дот? Я не впевнений, чи назва цієї функції є більш описовою, ніж відкрита запропонована ОП.
Єнс Ерат

@JensErat Це не має значення для проблеми. Питання полягало в тому, чи був компонент імені файлу, .чи ..ні, чи не почався він з .. Звичайно, назва функції ОП є більш описовим; Я просто вказував йому, як це технічно називається.
slhck

2
Звичайно, це є, але IsDotOrDotDot()майже нічого не говорить про те, що ця функція взагалі виконує.
Єнс Ерат

"попередник" посилається на елемент шляху безпосередньо перед ним у специфікації шляху. Якщо ви просто переглядаєте назви записів у каталозі, "поточний" або "батьківський" - краще термінологія.
Саймон Ріхтер

2
@JensErat Я б користувався IsDotOrDotDot. Усі, хто обізнаний з концепціями файлової системи, миттєво це зрозуміють. Дискусійно, чи .bash_historyє "крапка", оскільки контекст для значення "крапка" не надається, але, безумовно, НЕ "крапка чи крапка".
kinokijuf

4

.і ..зазвичай використовуються для опису відносних шляхів проти абсолютних подібних /usr. Я б використав цю різницю і оголосив функцію як IsRelativeCurrentOrParentDirectory().

Будьте в курсі, що посилання на крапки можуть виникати в будь-якому місці шляху. Про що /usr/local/..?


Я не зміг зазначити, що функція бере лише ім'я файлу, а не повний шлях. Я відповідно оновив питання.
Макс Трукса

2

Стандарт POSIX, який slhck ♦ корисно цитує, говорить:

Спеціальна назва файлу має позначатись….  Спеціальна назва файлу dot-dot повинна посилатися на….

(наголос додано). Тож, хоча це не зовсім технічно , схоже, що "спеціальне ім'я файлу" просто може бути офіційною назвою. Ваші користувачі, ймовірно , зрозуміти це , якщо ви назвали вашу функцію будь-якого з наступних умов : IsSpecialDirectory(), IsSpecialFilename()або просто IsSpecialName().

Або ви могли б піти з IsStandardDirectory(), IsStandardFilename()або IsStandardName(). Це дотримується конвенції іменування Unix (стандартний ввід, стандартний вихід) для речей, які встановлюються для вас автоматично (в даному випадку - mkfsі mkdir).  IsAutomatic…()або IsDefault…(), з іншого боку, напевно недостатньо інтуїтивно зрозумілі.


Насправді я взяв перше ім’я IsMagicDirectory(), і це досить близько до цього, але я вважаю, що ваше формулювання набагато інтуїтивніше і доречніше (тим більше, що воно використовує усталені конвенції про іменування). Використання IsSpecialFileNameнавіть дасть зрозуміти, що функція отримує не шлях, а єдине ім'я файлу (або каталогу, посилання тощо).
Макс Трукса

Гарна пропозиція. Однак "Спеціальне", ймовірно, також міститиме посилання, FIFO тощо, правда?
slhck

@slhck: Так, пристрої (наприклад, диски та ttys) називаються "спеціальними файлами". І, так, цей термін може бути вільно застосований до символічних посилань, FIFO та інших екзотичних розпізнавачів файлової системи - будь-якого типу файлів (i-вузол), крім «звичайного файлу». (Так, до цього відра потрапляють і каталоги.) Так IsSpecialFile()було б поганою пропозицією. Але я цього не пропонував; Я запропонував IsSpecialFilename(). У той час як імена sda1, console, kmem, myfifoі urandomнаводять, вони не захищені і не є по своїй суті особливі. Але .і ..по суті є особливими іменами .
Скотт

1

Єдиний термін, про який я знаю зі світу * nix - це CWDПоточний робочий каталог. Це насправді досить часто використовується. Див., Наприклад /proc/$$/cwd, посилання на каталог, з якого виконується команда.

Я не знаю жодної стандартної назви ..крім dot-dotі як @slhck зазначав, що це не вдалий вибір.


0

Posix досить неоднозначно говорити про відносини каталогів батько-дитина. Як говорили інші, ./ ..не корисно під час розмови або спілкування з іншими людьми.

Файлові структури можна розглядати як структуру даних про дерево. Тут взагалі "батьків" і "дитини" або "дочки" достатньо, щоб передати значення. Ви побачите, що підручники з структури даних містять цю умову

Крім того, здається, що про дерева можна говорити як про "вгору" і "вниз" дерево. За умовою "вгору" означає ближче до кореневого каталогу, а "вниз" відноситься до дитини (ren).

Я думаю, що IsCurrentOrUp()або IsCurrentOrParent()можна стверджувати, що це є хорошою практикою для іменування функцій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.