Формат імен файлів
У різних ФС допустиме ім'я файлу може мати різну довжину
ц йому можуть використовуватися різні набори символів. Так, в RT-H і
RSX-Ц імена файлів складаються з символів кодування RADIX-50 і мають довжину 9
символів: 6 символів — власне ім'я, а 3 — розширення. При цьому ім'я має
вигляд "Хххххх.Ххх", але символ '.' не є частиною імені —
це просто розділовий знак. Передбачається, що розширення повинне відповідати типові
даних, що зберігаються у файлі: SAV буде ім'ям абсолютного завантажуваного
модуля, FOR — програми на Фортрані, CRH - "файлом інформації про системний
крах", як було написано в одному переволе керівництво (просто
кажучи, це посмертна видача ОС, по якій можна спробувати зрозуміти причину
аварії).
У Ср/м і її нащадках MS DOS-DR DOS, а також в VMS імена файлів зберігаються
в 8-бітовому ASCII-кодировке, але чомусь дозволено використання лише
букв верхнього регістра, цифр і деяких друкованих символів. При цьому
в системах лінії Ср/м ім'я файлу має 8 символів плюс 3 символи розширення,
а в VMS як ім'я, так і розширення можуть містити більше 32 символів. Всі
перераховані системи використовують нечутливий до регістра букв пошук
в каталогах: імена file.с, File.С і FILE.С вважаються одним і тим же ім'ям.
Обмеження на формат імені в MS DOS
Цікаво, що MS/DR DOS при пошуку в каталозі переводять у верхній регістр
ім'я, задане користувачем, але залишають без змін ім'я, лічене
з каталога. Строго кажучи, це помилка: якщо ми створимо ім'я файлу, що
містить букви нижнього регістра, то жодна програма не зможе відкрити або перейменувати
такий файл.
Авторові довелося зіткнутися з такою проблемою при спробі прочитати
дискету, записану ОС ТС (Експериментальна UNIX-подобная ОС для
Паскаль-машины N9000). Проблему удалося вирішити лише за допомогою
шестнадца-теричного дискового редактора прямим редагуванням імен в каталогах.
Можливо, існує і елегантніше рішення, але авторові не удалося його знайти.
Використовувати конструкцію *.* марно, тому що, насправді,
операції над файлами, заданими таким чином, складаються з двох операцій:
FindFirst/FindNext, яка повертає [наступне] ім'я файлу, відповідне
шаблону, і Open. FindFirst/FindNext повертає недопустиме ім'я файлу
і Open не може використовувати його. Програма CHKDSK не заперечує проти
імен файлів в нижньому регістрі. Строго кажучи, це теж помилка. Всі останні
способи, так або інакше, зводяться до прямої (у обхід ДОС) модифікації ФС.
Крім
того, цікавих ефектів можна досягти, спробувавши створити файл з
ім'ям, що містить російські букви.
Найбільшим лібералізмом в сенсі імен відрізняються ОС сімейства Unix,
в яких ім'я файлу може складатися з будь-яких символів кодування ASCII,
окрім символів '\000' і V, наприклад, з восьми символів переведення каретки.
При цьому '\000' є обмежувачем імені, а V — роздільником між
ім'ям каталога і ім'ям файлу. Жодного розділення на ім'я і розширення
немає, і хоча імена файлів з програмою на мові Із закінчуються
".с", а об'єктних модулів — ".о", крапка тут є частиною
імені. Ви можете створити файл з ім'ям "gcc-2.5.8.tar.gz". У UNIX
SVR3 довжина імені файлу обмежена 14 символами, а в BSD UNIX, Linux і
SVR4— лише довжиною блоку на диску, тобто 512 байтами або більш. При цьому нульовий
символ вважається кінцем імені в каталозі.
Можливість використовувати в іменах
неалфавітні символи типа переведення каретки або ASCII EOT (End Of Transmission)
здається небезпечною надмірністю. Насправді:
- це не надмірність а, швидше,
спрощення — з процедур, що працюють з іменами, видалена перевірка
символу на "допустимість";
- воно не настільки вже небезпечне: такий файл завжди можна перейменувати.
В деяких випадках процес набору імені файлу в командному рядку
перетворюється на нетривіальну вправу, тому що shell (командний процесор)
розглядає багато неалфавітних символів як команди. Але треба відзначити,
що, правильно використовуючи лапки і символ '\', користувач може
передати команді аргумент, що містить будь-які символи ASCII, окрім
\000".
Довгі імена файлів в ОС сімейства
Ср/м
Останнім часом в ОС стало модним підтримувати довгі імена файлів.
Частково це, можливо, пов'язано з тим, що виробники ПО для персональних
комп'ютерів усвідомили, що системи сімейства Unix є потенційно
небезпечними конкурентами, а довгі імена файлів традиційно вважаються однією
з переваг цього сімейства.
Наприклад, OS/2, що
використовує файлову систему HPFS (High Performance File System —
високопродуктивна файлова система), підтримує імена файлів завдовжки
до 256 символів, що містять друковані символи і пропуски. Крапка
вважається частиною імені, як і в UNIX, і можна створювати імена, декілька крапок,
що містять. Аналогічну структуру мають імена в NTFS, використовуваною
в Windows NT/2000/XP, VFAT (реалізація файлової системи FAT16, використовувана
в Windows 95/98/ME) і FAT32.
Описані ОС при пошуку файлу наводять до одного регістра всі
алфавітні символи в імені. З одного боку, це означає додаткову Зручність
для користувача — при наборі імені не потрібно піклуватися про регістр букв,
з іншої — користувач не може створити в одному каталозі файли "text.txt"
і "Text.txt". Через це, наприклад, не можна
використовувати прийняте в UNIX угода про те, що файл на мові З має
розширення "с", а на мові C++ — "С".
Головна ж
проблема, що виникає при роботі з нечутливими « п гистру іменами,
— це перетворення регістра в іменах, использующи національні алфавіти:
російський, грецький, японську складову азбуку т.д. Файлова система, що
підтримує такі імена, повинна учитыват мовні налаштування ОС,
що створює багато складнощів, у тому числі і при прочитуванні носіїв, що
видаляються, записаних в одній країні, де-небудь за кордоном. У системах
сімейства Win32 ця проблема вирішена за рахунок зберігання імен у форматі Unicode.
Деякі ОС, наприклад, RSX-11 і VMS, підтримують також номер версії
файлу. У каталозі може існувати декілька версій файлу з одним ім'ям;
якщо номер версії при відкритті файлу не задається, то відкривається остання
версія.
Версії файлу дуже зручні при розробці будь-яких об'єктів, від програм або
друкарських плат до книг: якщо вам не сподобалися зміни, внесені вами
в останню версію, ви завжди можете відкататися назад. Нині функцію зберігання
попередніх версій змінних файлів і керованого відкоту до них реалізують
спеціальні застосування системи управління версіями
(version control system) (RCS, CVS і ін.). |