Формат файлу
Формат файлу (або тип файлу) в інформатиці — це усталений стандарт запису інформації у файлі даного типу. Спосіб кодування інформації або даних залежить від застосованої комп'ютерної програми. Часто формат файлу визначається його розширенням.
Загальноприйнята в обчислювальній техніці концепція файлу — неструктурована послідовність байтів. Комп'ютерні програми, що зберігають у файлах структуровані дані, повинні якось перетворювати їх в послідовність байтів і навпаки (в ООП ці операції називаються, відповідно, «серіалізацією» і «десеріалізацією» ; для текстової інформації останнє також називається «розбір» або «парсинг»). Алгоритм цього перетворення, а також угоди про те, як різні фрагменти інформації розташовуються усередині файлу, і складають його «формат».
Різні формати файлів можуть різнитися ступенем деталізації, один формат може бути «надбудовою» над іншим або використовувати елементи інших форматів. Наприклад, текстовий формат накладає лише загальні обмеження на структуру даних. Формат HTML встановлює додаткові правила на внутрішній устрій файлу, але при цьому будь-який HTML-файл є в той же час текстовим файлом.
Специфікації
Для багатьох форматів файлів існують опубліковані специфікації, в яких детально описано структуру файлів даного формату, те, як програми повинні кодувати дані для запису в цей формат і як декодувати їх при зчитуванні. Більшість таких специфікацій вільнодоступні, деякі поширюються за плату.
Іноді компанії можуть вважати певні формати файлів своєю комерційною таємницею і не публікувати їх. Добре відомий приклад — формати файлів пакету Microsoft Office. У деяких випадках компанія, що випустила додаток, просто не вважає за потрібне витрачати час на написання докладної специфікації.
Якщо специфікація формату недоступна, то для забезпечення сумісності програми з даним форматом доводиться займатися зворотньою розробкою. У більшості або в усіх країнах формати файлів не захищені законами про авторські права. Проте в деяких країнах патентами можуть бути захищені алгоритми, які використовуються для кодування даних у будь-який формат. Наприклад, у широко поширеному форматі GIF використовувався патентований алгоритм, що призвело до розробки альтернативного формату PNG.
Визначення типу файлу
Тип файлу — це інформація для швидкої ідентифікації вмісту файлу операційною системою і користувачем без необхідності зчитування всього вмісту файлу. Завдяки цій інформації, користувач приблизно знає тип інформації у файлі, а в операційній системі може бути знайдена програма для обробки файлів даного типу. З історичних причин, в різних операційних системах використовуються різні підходи для вирішення цього завдання.
Магічне число
Одним зі способів, який часто асоціюється з UNIX та похідними ОС, є зберігати метадані про тип файлу всередині самого файлу. Це називають сигнатурою файлу, або магічним числом[1]. Початково, термін «магічне число» (англ. Magic number) використовувався для специфічного набору двобайтових ідентифікаторів на початку файлу. Але так як будь-яка бінарна послідовність може розглядатись як число, довільна властивість формату файлу що його однозначно ідентифікує, може використовуватись в цій якості. GIF картинки, наприклад, завжди починаються текстом GIF87a або GIF89a закодованим в ASCII, залежно від стандарту якому вони відповідають. Багато типів файлів, особливо текстових важче відрізнити цим методом. Наприклад HTML файли, можуть починатись рядком <html> (в різному регістрі), або відповідним визначенням типу документа, наприклад <!DOCTYPE HTML> для HTML 5, або, для XHTML, ідентифікатором XML який починається з <?xml. Файли можуть також починатись з коментарів HTML, випадкового тексту чи кількох порожніх рядків, і все одно бути HTML-файлами придатними для використання.
Підхід з магічним числом дає кращі гарантії того що формат буде визначено коректно, і часто може визначити більш детальну інформацію про файл. Так як достатньо надійні перевірки «магічного числа» можуть бути досить складними, кожен файл повинен перевірятись практично щодо кожного типу в базі даних магічних чисел, цей підхід є не дуже ефективним, особливо при відображенні довгих списків файлів (на противагу, підходи з іменем та метаданими потребують отримання лише однієї частинки даних, і зіставлення її з відсортованим індексом). Також, дані мають читатись з самого файлу, що збільшує час доступу, порівняно з метаданими які зберігаються в самому каталозі. Проте, це найкращий спосіб для програми, якій сказали обробляти файл, визначити чи файл має коректний формат: хоча назва файлу та його метадані можуть бути змінені незалежно від вмісту файлу, негативні результати перевірки типу за магічним числом будуть певним знаком того що файл або пошкоджений, або не того типу. А з іншого боку — правильне магічне число теж не дає повної гарантії що файл правильного типу і не пошкоджений.
Шебанги в скриптах Unix є спеціальним випадком магічних чисел. Тут, магічне число — це текст що ідентифікує певний інтерпретатор і опції які він повинен отримати. Іншою операційною системою що використовувала магічні числа, була AmigaOS, де магічні числа називались «магічним печивом» (англ. "Magic Cookies").
В Linux для визначення формату файлу використовується програма file
[2], яка використовує бібліотеку libmagic
[3] для доступу до бази даних файлових сигнатур «magic»[4][5]
Посилання
Див. також
Примітки
- Magic number definition by The Linux Information Project (LINFO). Процитовано 29 червня 2016.
- The Fine Free File Command. Процитовано 29 червня 2016.
- libmagic(3): Magic number recognition library - Linux man page. Процитовано 29 червня 2016.
- magic(5): file command's magic pattern file - Linux man page. Процитовано 29 червня 2016.
- Linux Magic Numbers. Процитовано 29 червня 2016.