Что такое файл?

9

Я ищу формальное определение файла, который включает не только хранилище, но и абстракции, такие как procfs или / dev / null (или любой файл на основе предохранителей), которые не относятся к хранилищу.

До сих пор я знаю, что все файлы являются абстракциями, которые

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

однако мне не удалось найти какое-либо полезное формальное определение в любой книге по ОС, которую я читал до сих пор.

Джакомо Тесио
источник
ты смотрел в иноды?
Бхаскар
1
Я бы сказал, что такие вещи, как / dev / null, вообще не являются файлами, а скорее являются взломами, позволяющими нам получать доступ к не файловым вещам, как если бы они были файлами. Кроме того, мне не ясно, что вы подразумеваете под "формальным". В рамках какого формализма?
Дэвид Ричерби
"Файл - это то, что можно открыть с помощью fopen"?
adrianN
@DavidRicherby любая программная абстракция, которая ведет себя точно так же, как файл, является файлом: мы можем определять программные объекты только с точки зрения их поведения. Что касается формализма, я ищу что-то строгое с точки зрения CS. У нас есть формальное определение для машин Тьюринга, например.
Джакомо Тесио
Различные операционные системы приписывают файлы различным операциям, см., Например, * nix против Windows. Можно попытаться найти общий язык, но это не будет точным. Кроме того, в CS редко говорят о файлах - я думаю, что это делается только при проектировании ОС, файловой системы, возможно, СУБД или в некоторых алгоритмах на диске (например, сортировка-слияние). (и несколько других)
Чи

Ответы:

6

Согласно Википедии, компьютерный файл - это просто ресурс для хранения информации. Похоже, этот термин возник в эпоху перфокарт, когда компьютерная программа буквально хранилась в файле (например, ящик для хранения потерянных страниц, см. Изображение ниже). По мере появления других форм носителей, таких как диски, использовалась номенклатура.

С точки зрения * nix, все является файлом: сокеты, устройства, терминалы, экраны / мониторы, файлы данных, каналы и так далее. Microsoft Windows, напротив, имеет тенденцию называть данные постоянного хранения «файлами», а энергозависимые ресурсы такими, какими они являются, такими как именованные каналы, сокеты, растровые устройства и т. Д. Другие системы могут иметь аналогичные определения где-то между этими двумя крайностями.

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

Файл перфокарты]( Википедия )

phyrfox
источник
Я прочитал определение Википедии, но оно слишком сфокусировано на хранении. Как уже говорилось, я ищу определение, которое охватывает файлы, такие как / dev / null, которые не хранят данные.
Джакомо Тесио
@GiacomoTesio Две вещи, которые я пытался сделать: (a) файл означает разные вещи для разных авторов, хотя (b) файлы по крайней мере универсально определены как ресурсы. NUL и / dev / null - это специальные ресурсы, потому что они на самом деле ничего не хранят, но, тем не менее, являются ресурсами. Ресурс - это просто то, что может передавать или получать данные (или оба). Определение файла в общей книге ОС будет зависеть от точки зрения автора.
phyrfox
2

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

Предыдущий постер прав, что устройства, которые рассматриваются как файлы, на самом деле не являются файлами. Это очень полезный хак.

Итак, мое определение файла: последовательность байтов, хранящихся в памяти.

ncmathsadist
источник
2
«Итак, мое определение файла: последовательность байтов». является последовательностью (скажем, UTF-8) байтов. Это файл?
reinierpost
Мы говорим об программных абстракциях, все, что ведет себя как файл, является файлом. На самом деле мы не можем определить любую программную сущность, кроме как по ее поведению.
Джакомо Тесио
«Я думаю о файле как о последовательности байтов». Это не единственное определение «файловой системы». См., Например, en.wikipedia.org/wiki/Record-oriented_filesystem
псевдоним