Що таке файл?


9

Я шукаю формальне визначення файлу, що включає не лише сховище, але й абстракції, такі як procfs або / dev / null (або будь-який файл на основі запобіжників), які не стосуються зберігання.

Поки я знаю, що всі файли - це абстракції

  • можна ідентифікувати
  • може мати імена (як правило, організовані в ієрархічних структурах)
  • можна отримати доступ до потоку байтів
  • зазвичай надають дозволи та інші метадані (специфічні для системи)

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


ви заглядали в індекси?
Бхаскар

1
Я б заперечував, що такі речі, як / dev / null, це зовсім не файли, а, швидше, це хаки, що дозволяють нам отримувати доступ до нефайлових речей так, ніби вони були файлами. Також мені незрозуміло, що ви маєте на увазі під "формальним". В рамках якого формалізму?
Девід Річербі

"Файл - це те, що можна відкрити фопенд"?
adrianN

@DavidRicher Завдяки будь-якій абстракції програмного забезпечення, яка веде себе точно як файл, є файлом: ми можемо визначати програмні об'єкти лише з точки зору їх поведінки. Щодо формалізму, я шукаю щось суворе з точки зору КС. Наприклад, у нас є офіційне визначення для машин для твердіння.
Джакомо Тесіо

Різні ОС відносять файли до різних операцій, див., Наприклад, * nix vs Windows. Можна спробувати знайти спільну мову, але це не буде точно. Крім того, у CS рідко говорять про файли - я думаю, що це робиться лише під час проектування ОС, файлової системи, можливо СУБД, або в деяких дискових алгоритмах (наприклад, сортування-об’єднання). (та ще декілька інших)
чи

Відповіді:


6

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

З точки зору * nix, все - це файл: розетки, пристрої, термінали, екрани / монітори, файли даних, труби тощо. Microsoft Windows, навпаки, має тенденцію називати дані постійного зберігання "файлами" та енергонезалежними ресурсами, якими б вони не були, наприклад, названими трубами, розетками, растровими пристроями тощо. Інші системи можуть мати подібні визначення десь між цими двома крайнощами.

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

Файл Punch Card]( Вікіпедія )


Я прочитав визначення wikipedia, але він занадто зосереджений на зберіганні. Як було сказано, я шукаю визначення, яке охоплює файли типу / dev / null, які не зберігають дані.
Джакомо Тесіо

@GiacomoTesio Два пункти, які я намагався зробити, це: (а) файл означає різні речі для різних авторів, хоча (b) файли принаймні універсально визначені як ресурси. NUL та / dev / null - це спеціальні ресурси, оскільки вони насправді нічого не зберігають, але все-таки є ресурсами. Ресурс - це просто те, що може передавати або приймати дані (або обидва). Визначення файлу загальної книги ОС буде залежати від точки зору автора.
фірфокс

2

Я думаю про файл як послідовність байтів. Навіть після того, як він втрачає свою назву (зазвичай викликаний закликом до rm, який відключає його), він все ще існує на диску, поки його шматки не будуть перезаписані іншими матеріалами. Формати файлів - це контексти для читання файлів. Все це сходить до принципу, що інформація є байтами плюс контекстом.

Попередній плакат правильно, що пристрої, хоча вони розглядаються як файли, насправді не є файлами. Це дуже корисний хак.

Отже, моє визначення файлу: послідовність байтів, що зберігаються в пам'яті.


2
"Отже, моє визначення файлу: послідовність байтів." є послідовністю (скажімо, UTF-8) байтів. Це файл?
reinierpost

Ми говоримо про програмні абстракції, все, що поводиться точно як файл, - це файл. Насправді ми не можемо визначити жодне програмне забезпечення, окрім його поведінки.
Джакомо Тесіо

"Я думаю про файл як послідовність байтів." Це не єдине визначення "файлової системи". Дивіться, наприклад, en.wikipedia.org/wiki/Record-oriented_filesystem
Псевдонім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.