Как найти структуру файла

 

Строение файла. Как узнать?

Сообщение14.03.2009, 13:39 


16/11/08
16
Казахстан

Здраствуйте все!

Пишу тут первый раз, да может и не там пишу.

Но вот в чем вопрос. Допустим есть какой-нибудь игровой, неигровой — неважно файл и мне его нужно вскрыть. Структуру файла незнаю(построен по типу архива например или нет). Так как мне понять эту структуру, и чем ее вскрывать(чтоб структуру понять)? Чтобы написать прогу по вскрытию этого файла(формата).

Профиль  

worm2 

Сообщение14.03.2009, 13:46 

Заслуженный участник
Аватара пользователя


01/08/06
2958
Уфа

Иногда помогает поиск в Интернете или задание вопроса в тематических форумах.

Профиль  

PAV 

Сообщение14.03.2009, 14:03 

Супермодератор
Аватара пользователя


29/07/05
8248
Москва

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

Профиль  

Yuri Gendelman 

Re: Строение файла. Как узнать?

Сообщение14.03.2009, 16:44 

Заслуженный участник


15/05/05
3445
USA

@ndrey писал(а):

Допустим есть какой-нибудь … файл и мне его нужно вскрыть. Структуру файла незнаю. Так как мне понять эту структуру…?

Для каждого формата файла существует формальное описание, стандарт. Стандарты могут быть открытые (описание опубликовано) и закрытые (описание держится в секрете). Часто открытые типы можно узнать по расширению имени (.bmp, .mp3, .pdf). Описание закрытых форматов иногда можно найти на форумах. Некоторые форматы содержат сигнатуру

— несколько байтов в начале — по которым их можно узнать. Например, «rar», «PK» (zip), «%PDF», «BM» (bmp), «II» или «MM» (tiff). Сигнатура может быть и двоичной.

Вскрыть неизвестный формат — это сложная хакерская задача. Как сказал PAV

, это процесс творческий и не формализуемый

.

Профиль  

@ndrey 

Re: Строение файла. Как узнать?

Сообщение14.03.2009, 18:51 


16/11/08
16
Казахстан

Yuri Gendelman писал(а):

Для каждого формата файла существует формальное описание, стандарт. Стандарты могут быть открытые (описание опубликовано) и закрытые (описание держится в секрете). Часто открытые типы можно узнать по расширению имени (.bmp, .mp3, .pdf). Описание закрытых форматов иногда можно найти на форумах. Некоторые форматы содержат сигнатуру

— несколько байтов в начале — по которым их можно узнать. Например, «rar», «PK» (zip), «%PDF», «BM» (bmp), «II» или «MM» (tiff). Сигнатура может быть и двоичной.

Спасибо про это знаем.

Цитата:

Вскрыть неизвестный формат — это сложная хакерская задача. Как сказал PAV

, это процесс творческий и не формализуемый

.

Вот как раз я про это и хотел спросить в первом посте.

Просто возможно я тупо написал вопрос. Написал что-то типа ребуса, хотя можно было так просто.

Каким способом хакеры взламывают формат. Т.е. по сути им надо определить структуру файла, а сам формат не столь важен. Его можно любым hex редактором просмотреть в заголовке файла(впринципе как написано выше).

Да и если никто не хочет отвечать, понимаю. Все просто умные настолько, что объяснить даже не в состоянии. Да все начинали с малого(просто все себя уже считают отличными кодерами), а помочь то друг другу вряд ли кто хочет.

Профиль  

worm2 

Сообщение14.03.2009, 19:45 

Заслуженный участник
Аватара пользователя


01/08/06
2958
Уфа

@ndrey писал(а):

Каким способом хакеры взламывают формат.

Во-первых, смотрят на него в hex-редакторе и исходя из своего богатого опыта, сравнивая с уже известными им форматами, могут многое про него узнать. Но если формат не похож на остальные, то этот способ ничего не даст.

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

В-третьих (если формат сложный или зашифрованный) взламывают программу или аппаратное устройство (например, запускают программу под отладчиком, находят в ней место, в которой происходит ввод параметров, и прослеживают путь этого параметра до записи в файл; либо передавая программе доступные корректные файлы этого формата, прослеживают обратный путь: от чтения файла до какого-либо обнаружения его содержимого). Расшифровка формата получается как побочный эффект взлома программы либо устройства.

Возможно даже, что я тут перечислил все способы. Не исключаю, что если ни один из них осуществить не удастся, то ни один хакер больше ничего не сможет сделать.

Профиль  

@ndrey 

Сообщение18.03.2009, 13:09 


16/11/08
16
Казахстан

Цитата:

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

Какую программу берут?

И каким образом происходит *раскол*?

Профиль  

worm2 

Сообщение18.03.2009, 14:55 

Заслуженный участник
Аватара пользователя


01/08/06
2958
Уфа

@ndrey писал(а):

Какую программу берут?

Я имею в виду, что Ваш файл не сам по себе нас интересует, с какой-то целью? Он, наверное, используется какой-то программой? Например: файл сохранения для компьютерной игры; Вы его хотите понять, чтобы поменять и сделать себе бесконечное число жизней. В данном случае программой выступает игра, которую и хочется обмануть (её и нужно запустить под отладчиком), а файл — лишь средство.
Или вот ещё пример: файл содержит информацию о том, с какого банковского счёта, на какой и сколько перевести денег. Хочется его подделать, чтобы 0.01% средств со счёта ОАО «Газпром» попали на наш счёт. «Газпром» большой, для него такая сумма всё равно ничего не значит, а нам бы она очень даже не помешала. Здесь «программой» будет информационная система банка. Однако в данном случае есть подозрения, что нам её просто так не дадут погонять под отладчиком, и этот метод реализовать сложнее.

Цитата:

И каким образом происходит *раскол*?

В каждом конкретном случае — по-разному. На всякий случай сообщу, что не существует программ, для раскола всего. Есть, например, средства для взлома программ, защищённых аппаратным ключом HASP. Причём под «взломом» здесь подразумевается исключительно несанкционированный запуск программы (но никак не расшифровка файлов, с которыми она работает). Но и эта задача не будет решена данными средствами, если используется другой аппаратный ключ, или даже система защиты та же, но используется нестандартно Ну и т.д.

Чтобы сориентироваться в разнообразных средствах взлома разнообразных систем, Вам, действительно, нужно обращаться на специализированные (хакерские) форумы. Здесь если и есть подобного рода специалисты, то вряд ли они будут Вам подсказывать конкретные средства и приёмы. Хотя бы потому, что подобная деятельность, вообще-то, уголовно наказуема.

Профиль  

@ndrey 

Сообщение20.03.2009, 17:24 


16/11/08
16
Казахстан

worm2 писал(а):

Я имею в виду, что Ваш файл не сам по себе нас интересует, с какой-то целью? Он, наверное, используется какой-то программой? Например: файл сохранения для компьютерной игры; Вы его хотите понять, чтобы поменять и сделать себе бесконечное число жизней. В данном случае программой выступает игра, которую и хочется обмануть (её и нужно запустить под отладчиком), а файл — лишь средство.

Вы правы речь идет об игре, только она в данном случае под приставку. И как знаете у нее нет как такового exe файла, запускается напрямую из биоса(приставка дримкаст, благо есть норм. эмуляторы).

Файл содержит в себе текстуры, модели(точно не уверен). Но как таковой он содержит информацию(координаты текстур и модели), после чего передает информацию процессору и он подгружает это в игру.

Так вот собственно файл этот я и хочу попробывать взломать. Написать програмку(но вот структуру файла увы не знаю :? ). Экспортер текстурок есть, а моделек нет.

Отладчик вроде есть на эмуле.

Да и простите за столь назойливые вопросы.

Да и если это так наказуемо(хотя японцы вряд ли сюда полезут), то можно в личку.

Профиль  

Yuri Gendelman 

Сообщение20.03.2009, 21:13 

Заслуженный участник


15/05/05
3445
USA

worm2 писал(а):

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

Приставки обычно очень специфичны, используют специально разработанные для них CPU и GPU, Нужно искать форумы и сайты, посвященные данной конкретной игровой приставке. Для популярных приставок обычно можно найти подробные FAQ, описания форматов файлов, редакторы уровней, эмуляторы приставок на десктопе и т.п.

Профиль  

Watchman 

Сообщение10.05.2009, 23:37 


21/04/09
25

Если надо подхачить какой-то определенный числовой параметр, то сначала в игре узнаете конкретную величину, скажем, количество жизней = 1375. Делаете save. Потом переводите это число в hex, получается 05 5F или 5F 05. Ищете это число в save-файле. Если оно там встречается небольшое количество раз, то пробуете модифицировать, делаете load, смотрите, изменилось ли оно в игре. Если изменилось, значит, вы нашли нужное место. Если вам надо взламывать много save-ов и автоматически, придется смотреть, пишется ли это число каждый раз в одно место, если нет, то угадывать закономерность.

Профиль  

maxal 

Re: Строение файла. Как узнать?

Сообщение11.05.2009, 22:05 

Модератор
Аватара пользователя


11/01/06
5613

Профиль  

Профессор Снэйп 

Re: Строение файла. Как узнать?

Сообщение22.07.2009, 22:05 

Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск

…сначала в игре узнаете конкретную величину, скажем, количество жизней = 1375.

Ни разу не видел игры, в которой какому-нибудь персонажу давали бы (без взлома и чит-кодов) 1375 жизней :)

У меня вот какая-проблема. Есть запароленный zip-архив, пароль я, увы, начисто забыл :( Как его можно восстановить/подобрать? Видел в сети специальные программы, но они либо платные, либо беспонтовые. Есть что-нибудь бесплатное и хорошее для моих целей?

Профиль  

maxal 

Re: Строение файла. Как узнать?

Сообщение22.07.2009, 22:43 

Модератор
Аватара пользователя


11/01/06
5613

У меня вот какая-проблема. Есть запароленный zip-архив, пароль я, увы, начисто забыл :( Как его можно восстановить/подобрать? Видел в сети специальные программы, но они либо платные, либо беспонтовые. Есть что-нибудь бесплатное и хорошее для моих целей?

Из бесплатных — FCrackZip:

http://oldhome.schmorp.de/marc/fcrackzip.html

Профиль  

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы

Как устроены файлы? Разбор

Время на прочтение
6 мин

Количество просмотров 17K

Файлы… что вообще может быть проще? Мы все привыкли создавать, удалять, редактировать, перекидываться файлами.

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

Заодно узнаем, почему iPhone зависает от SMS и распотрошим PowerPoint.

Почему форматов файлов так много?

Если бы мы просто могли взглянуть на сырые данные, которые хранятся внутри жесткого диска или SSD, то мы бы не увидели никаких файлов: мы бы увидели только нолики и единички. Потому как, в любом случае, в памяти компьютера всё хранится в виде сплошного потока двоичного кода.

Но как же тогда понять, где заканчивается один файл и начинается другой?

Поначалу эту проблему человечество решало брутально. Люди записывали один файл на один жесткий диск, чтобы уж точно не ошибиться. Поэтому раньше словом файл называли не отдельную область на жестком диске, а прям целое устройство. К примеру IBM 305.


CTSS (Compatible Time-Sharing System)

Но потом, люди придумали файловые системы. Если очень упростить, это такое оглавление в котором указано имя файла, где он начинается и его длина. А также всякие метаданные, типа время создания, изменения, и можно ли его перезаписывать.

Но для того чтобы прочитать файл, знать его местоположение и границы на жестком диске недостаточно, ведь нам нужно как-то расшифровать бинарный код.

Для этого и существуют различные форматы файлов. В большинстве операционных систем форматы файлов указываются в виде расширения, которое отделяется точкой от имени файла. А если вы не видите расширения, это нормально. Потому что, по умолчанию, современные ОС их скрывают, но можно поставить галочку в настройках.

Расширение даёт подсказку операционной системе и программам, о том какой тип данных он содержит и как это всё структурировано. Например, увидев файл droider.jpg операционная система и мы, люди, сразу понимаем, что это картинка в формате JPEG.

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

Поэтому давайте разберем, как устроены наиболее популярные форматы файлов от более простых к более сложным.

TXT

Один из самый простых форматов — это TXT. Это текстовый формат. Знаменитое приложение «Блокнот» в Windows работает как раз с этим форматом.

TXT — формат незамысловатый. Он может хранить в себе только простой неформатированный текст, то есть в нем нет никаких выделений, подчеркиваний, курсивов, отступов, разных шрифтов. Только голый текст, а точнее просто символы.

Каждый символ в TXT-формате хранится в виде бинарного кода.

Hello, world!

То что мы с вами видим как осмысленный текст, операционная система видит вот так:

01001000 01100101 01101100 01101100 01101111 00101100 00100000 01110111 01101111 01110010 01101100 01100100 00100001

Каждые 8 цифр, то есть 8 бит этого кода — это отдельный символ.

Например, 01001000 — это “H”, 01100101 — это “e”, и так далее.

01001000 — H

01100101 — e

01101100 — l

01101100 — l

01101111 — o

Но как операционная система расшифровывает эти данные? Всё просто. Операционной системе требуется загрузить таблицу, в которой описано соответствие бинарного кода конкретному символу. Таких таблиц много, самые известные сегодня — CP1251 (Windows), UTF-8 (Android, Mac) и так далее. Такие таблицы, часто называют кодировками. В данном файле используется кодировка UTF-8, то есть 8-битный Юникод.

Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-бит»

Подобрав правильную кодировку остается дело техники. Система сопоставляет бинарный код с таблицей кодировки UTF-8 и готово! Но что будет если система подберет кодировку неправильно? Вариантов не много, скорее всего мы увидим крякозябры:

çÁ%%?Œ€Ï?Ê%À (кодировка EBCDIC).

И такое часто случается, так как TXT-файл не содержит никакой дополнительной информации о кодировке. И это большой недостаток формата.

Еще интересный момент. Исторически, компьютеры «знали» только латиницу, которая используется в большинстве европейских языков. И тут произошла проблема: 8-бит — это всего лишь 256 возможных значений. Это немного, но этого было достаточно, чтобы закодировать все базовые символы + латинские буквы.

И вдобавок, эту таблицу нужно было загрузить в оперативную память при загрузке компьютера, а у типового ПК в начале 80-х годов редко было больше 640 килобайт оперативки. А использовать 16-битные таблицы (65536 вариантов) было просто невозможно, такая таблица просто не влезла бы в память.

Но мощность компьютеров росла и проблема ушла. К таблицам с латинскими символами добавились кириллические, которые занимали уже не по 8 бит, а по 16 бит каждый. Поэтому текст на русском занимает в два раза больше памяти, при том же количестве символов.

11010000 10011111 11010001 10000000 11010000 10111000 11010000 10110010 11010000 10110101 11010001 10000010 00101100 00100000 11010000 10111100 11010000 10111000 11010001 10000000 00100001

11010000 10011111 — П

11010001 10000000 — р

10111000 11010000 — и

11010000 10110010 — в

Привет, мир!

Старики помнят лайфхак, если писать SMS на латинице, то влезет в два раза больше текста. Всё это как раз из-за кодировки.

Кстати, помните все эти случаи, когда iPhone умирал от присланного сообщения со странными символами или картинки? Это как раз связано с тем, что система не могла правильно распознать присланные символы и правильно определить их длину.

Например, вот такое сообщение в своё время заставляло любой айфон уйти в цикличный ребут:

Power
لُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ

WAV

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

К примеру, возьмём файл в формате WAV.

Это простой аудиоформат, который содержит несжатый. Всё CD диски записаны в формате WAV.

Первые 44 байта классического WAV-файла содержат заголовок, к котором указывается полезнейшая информация:

  • количество аудио каналов;
  • частота дискретизации;
  • битовая глубина;
  • и многое другое.

Все эти данные позволяют быть уверенным, что аудио будет воспроизведено корректно.

Открытые и проприетарные форматы

Структура WAV хорошо известна и наверное такой файл сможет прочитать практически любой плеер. Всё потому, что WAV-файл — это пример открытого формата.

Есть и другие открытые форматы, которыми вы ежедневно пользуетесь. Например:

  • язык разметки web-страниц — HTML;
  • картинки — PNG;
  • аудио в формате — OGG;
  • архива — ZIP;
  • видео — MKV;
  • электронной книги — EPUB;
  • и другие…

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

Проприетарные форматы всем прекрасны, но в отдельных случаях они препятствуют конкуренции в сфере программного обеспечения, так как приводят к замыканию на поставщике. Есть даже такой термин Vendor lock-in.

Старый офис

Например, раньше такая ситуация была с форматами Microsoft Office: DOC, XLS, PPT.

Мало того, что это были проприетарные форматы компании Microsoft и работали только с фирменным ПО. Так еще Microsoft постоянно меняли свою структуру файлов от одной версии MS Office к другой. И в результате? при выходе новой версии офисного пакета? файлы из старого редактора уже не читались новым, а наоборот — и подавно.

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

ODF и OOXML

1 мая 2006 года на свет появился формат формат ODF, что буквально расшифровывается как открытый формат документов для офисных приложений. Он был разработан консорциумом OASIS и Sun Microsystems.

  • ODF — Open Document Format for Office Application.
  • OASIS — Organization for the Advancement of Structured Information Standards.

Формат основан на универсальном языке разметки XML. А сам файл ODF представляет из себя ZIP-архив с папками, XML-файлами и всякими вложениями в виде картинок, видео и прочим. Иными словами, если открыть такой файл через архиватор мы можем спокойно увидеть все внутренности. Вот так пример открытости!

Microsoft тоже не спал. Под давлением Европейского суда они объединились с рядом компаний в ассоциацию ECMA и разработали свой открытый формат Office Open XML, который появился на свет чуть позже в 2006 году.

OOXML стандартизирован European Computer Manufacturers Association. Standard ECMA-376

К привычным форматом конце добавилась буква X и мы получили: DOCX, XLSX, PPTX.

OOXML — Office Open XML (DOCX, XLSX, PPTX)

OOXML, в целом, очень похож на ODF. Он также основан на XML-разметке и также представляет из себя ZIP-архив. Поэтому вы также можете заглянуть внутрь офисных файлов при помощи любого архиватора. Можно даже вытащить картинки и даже подменить их, что бывает особенно удобно при работе с презентациями или когда вам присылают текстовый документ с картинками внутри файла.

Несмотря на кажущуюся простоту, формат реально сложный. Только основная документация — это 5 тысяч страниц. И это практически без картинок.

Тем не менее, кто-то всё таки смог прочитать всю эту документацию и поэтому на свет появились классные офисные пакеты, например МойОфис, которые умеют работать и ODF форматом, и с Office Open XML, и даже с устаревшими форматами типа DOC.

Но есть важная ремарка про старые форматы. Как правило, современный софт умеет их только читать, но не записывать, потому как это действие требует приобретение лицензии Microsoft. Впрочем, в наше время это действие, мягко говоря, бессмысленно.

Итого

Что мы в итоге узнали? Файлы бывают нескольких типов:

Самые базовые — бинарные. Такие форматы любят придумывать компании, чтобы никто не понял, как их программы хранят данные.

Более открытый вариант — xml-контейнеры. К счастью, большинство популярных офисных форматов сейчас такие. Если хотите работать со всеми этими файлами хоть дома, хоть на бегу, скачивайте программы МойОфис! На этом у нас сегодня всё.

Как известно, для перемещения между каталогами в командной строке Windows используется команда cd. Но для перемещения ещё было бы неплохо представлять структуру каталогов и файлов. Для этого используется команда TREE.

Синтаксис команды очень прост:

TREE [путь] [/F] [/A]

Как видите, у команды tree всего два параметра.

/F — отображение файлов в папках;

/A — использование символов ASCII вместо символов псевдографики.

Например, команда

tree "c:program filesrealtek"

покажет структуру папок, начиная с указанного каталога.

Как посмотреть структуру папок и файлов в командной строке Windows

А команда

tree "c:program filesrealtek" /f

отобразит ещё и файлы.

Как посмотреть структуру папок и файлов в командной строке Windows

С символами ASCII это выглядит так:

tree "c:program filesrealtek" /a

Как посмотреть структуру папок и файлов в командной строке Windows

Команда tree позволяет записать структуру файлов и папок в файл.

tree "c:program filesrealtek" > realtek.txt

Если текстовый редактор, которым вы будете открывать файл, не поддерживает символы псевдографики (пример — Блокнот), используйте параметр /a.

В
лекции рассмотрены следующие вопросы:
интерфейс с системой файлов; структура
файла и операции над файлом; типы файлов;
отличия файловых систем в ОС MULTICS и
«Эльбрус» от файловых систем в ОС
для ПЭВМ; файлы последовательного и
прямого доступа; директория, способы
организации директорий; монтирование
файловых систем; защита файлов; блок
управления файлом; принципы реализации
файловых систем.

Содержание

  • Введение

  • Понятие
    файла

  • Структура
    файла

  • Атрибуты
    файла

  • Операции
    над файлами

  • Типы
    файлов – имена и расширения

  • Методы
    доступа к файлам

  • Директории

  • Особенности
    системы файлов в «Эльбрусе»

  • Типичная
    организация файловой системы изображена
    на рис. 19.3.

  • Операции
    над директориями

  • Логическая
    организация директорий

  • Монтирование
    файловых систем

  • Общий
    доступ к файлам

  • Защита
    файлов

  • Реализация
    файловых систем

  • Структура
    файловой системы

  • Системные
    структуры в памяти для управления
    файловой системой

  • Ключевые
    термины

  • Краткие
    итоги

  • Набор
    для практики

    • Вопросы

    • Упражнения

    • Темы
      для курсовых работ, рефератов, эссе

Введение

Файл
– совокупность логически объединенных
данных во внешней памяти. Управление
файлами – одна из важных задач ОС, так
как в виде файлов в системе хранится
практически любая информация – программы
и данные. В лекции рассмотрены следующие
вопросы:

  • Понятие
    файла

  • Методы
    доступа

  • Структура
    директорий

  • Монтирование
    файловых систем

  • Общий
    доступ к файлам

  • Защита
    файлов

  • Принципы
    реализации файловых систем

  • Блок
    управления файлом.

Понятие
файла

Файл
(file) –
это
смежная область логического адресного
пространства. Как правило, файлы хранятся
во внешней памяти.

Немного
о терминологии. Слово файл
уже
несколько
десятков лет используется
как русское – один из многочисленных
примеров программистских неологизмов.
Первоначально, когда около 50 лет назад
появился данный английский термин, в
русскоязычной литературе специалисты
пытались ввести другую терминологию –
слово file
переводили
как фонд
и
даже тека

смысле хранилище).
Однако исторически сложилось иное
решение
– слово файл
стало
русским. В английском языке слово file
имеет
много других значений: например, подшитый
в папку бумажный документ
и
даже стадо
(например,
слонов) – в последнем случае, как можно
предположить, размер «файла» может
быть очень велик. У всех в памяти название
легендарного сериала «X
files»

вольном русском переводе – «Секретные
материалы»).

Фирма
IBM в документации по своей системе IBM
360 в 1960-х гг. использовала
иной термин – набор
данных (data set) –
для
обозначения этого же понятия, однако
он не пережил операционную систему, в
которой использовался.

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

Структура
файла

В
различных системах приняты различные
точки зрения на структуру файлов. В ряде
систем структура файла привязывалась
к типу устройства, на котором он находится.
В некоторых других системах структура
файла была искусственно усложнена.
Однако наиболее простую и унифицированную
точку зрения из них предложили авторы
системы UNIX: файл
– это последовательность слов или
байтов
.
Казалось бы, это очевидно, но преимущество
данного подхода к файлам в том, что
базовое представление файла и базовые
операции над ним (read, write) не зависят от
типа устройства. В свое время для
программистов нашего поколения такой
подход к файлам был откровением, после
сложностей системы файлов IBM 360, а затем
– «Эльбруса». Можно сказать, что
файлы в своем развитии прошли путь,
аналогичный развитию архитектур
компьютеров – сначала в сторону
значительных усложнений, затем –
упрощения и унификации.

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

Файлы
простой
структуры
состоят из последовательности записей
(records) –
элементарных
единиц, в терминах которых выполняются
операции обмена с файлом. Записи могут
быть:

  • строками,
    если это текстовый
    файл
    ;

  • двоичными
    данными фиксированной
    длины
    ;

  • двоичными
    данными переменной
    длины
    .

Файлы
сложной
структуры
могут
быть самого разного вида, например:

  • отформатированным
    документом
    Microsoft
    Office (такой файл, кроме собственно текста,
    содержит управляющие символы переключения
    шрифтов, цветов и т.д.);

  • загрузочным
    модулем
    реального
    или виртуального двоичного кода,
    например, portable
    executable (PE)
    -файлом
    для платформы .NET; class-файлом для платформы
    Java; подобные файлы состоят из нескольких
    секций, содержат внутренние ссылки и
    таблицы и т.д.

Сложная
структура файла может быть смоделирована
записями путем добавления соответствующих
управляющих символов.

Файлы
интерпретируются операционная система
или программами их обработки.

Атрибуты
файла

Практически
в любой системе файлов можно считать,
что файл состоит из заголовка
и
памяти.
В
заголовке файла хранятся его атрибуты

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

Различаются
следующие основные атрибуты файла:

Имя
(Name)

название файла в символьной форме,
воспринимаемое пользователем.

Тип
(Type)

тип хранимой в файле информации. Отдельный
атрибут тип
необходим
для систем, которые поддерживают
различные типы файлов. Например, в
системе «Эльбрус» значением атрибута
тип
файла
является
число, кодирующее тип: 0 – данные, 2 –
код, 3 – текст и т.д. Однако более
общепринятым подходом является подход,
принятый в систем ах MS DOS, Windows, UNIX: тип
файла кодируется расширением
имени
,
например, book.txt

текстовый файл (.txt), содержащий текст
книги.

Размещение
(Location)

указатель на размещение файла на
устройстве.

Размер
(Size)

текущий размер файла.

Защита
(Protection)

управляющая информация, задающая
полномочия чтения, изменения и исполнения
файла.

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

В
ОС UNIX дату модификации файла можно
изменить командой touch
f,
где f

имя файла. Touch
дословно
означает потрогать.
Кроме изменения времени модификации,
больше никаких действий над файлом не
производится.

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

Информация
о файлах хранится в структуре директорий
(
или
справочников

directories),
иногда,
например, в системе Windows, называемых
также папками
(folders)

структурами во внешней памяти, содержащими
символьные имена файлов и ссылки на
них. Важнейшая концепция директории
подробно рассматривается далее в данной
лекции.

Операции
над файлами

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

  • Создание
    файла
    (Create).
    Создается заголовок файла; первоначально
    его содержимое (память) пусто.

  • Запись
    в
    файл (Write).
    Как правило, происходит записями
    (records)
    или
    блоками

    более крупными логическими единицами
    информации, объединяющими несколько
    записей, с целью оптимизации операций
    ввода-вывода.

  • Чтение
    из
    файла (Read).
    Обычно также выполняется записями или
    блоками.

  • Поиск
    позиции внутри файла (позиционирование)
    (Seek).
    Позиция задается номером записи или
    блока, либо специальными именами,
    обозначающими начало файла (позиция
    перед первой записью) или конец файла
    (позиция после последней записи).

  • Удаление
    файла
    (Delete).
    В зависимости от реализации системы
    файлов, ошибочное удаление файла может
    быть фатальным (UNIX) или исправимым (MS
    DOS).

  • Сокращение
    файла
    (Truncate).

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

  • Закрытие
    файла
    (Close)
    – запись содержимого буферов в блоки
    файла; обновление файла во внешней
    памяти в соответствии с его текущим
    состоянием; освобождение всех структур
    в основной памяти, связанных с файлом.

Для
выполнения операций обмена с файлом
(read,
write
),
как правило, файл необходимо открыть.
Закрытие файла является обязанностью
пользовательского процесса; однако,
если он по како-либо причине этого не
выполняет, то закрывает все файлы,
открытые процессом, операционная система
после завершения или прекращения
процесса.

Типы
файлов – имена и расширения

В
таблица
19.1

приведены некоторые наиболее
употребительные типы файлов и
соответствующие им расширения имен.

Таблица
19.1. Типы файлов – имена и расширения

тип
файла

расширение
имени

функциональность

исполняемый
код (загрузочный модуль)

exe,
com, bin или отсутствует

готовая
к выполнению программа в бинарном
машинном коде

обьектный
модуль

obj,
о

откомпилированная
программа в бинарном коде, но не
слинкованная

исходный
код на языке программирования

с,
сс, Java, pas, asm, а

исходный
код на различных языках (Си, Паскаль
и др.)

командный
файл

bat,
sh

файл
с командами для командного интерпретатора

текст

txt,
doc

текстовые
данные, документы

документ
для текстового процессора

wp,
tex, rrf, doc

документе
формате какого-либо текстового
процессора

библиотека

lib,
a, so, dll, mpeg, mov, rm

библиотеки
модулей для программирования

файл
для печати или визуализации

arc,
zip, tar

ASCII
или бинарный файл в формате для печати
или визуализации

архив

arc,
zip, tar

несколько
файлов, сгруппированных в один файл,
для архивации или хранения

мультимедиа

mpeg,
mov, rm

бинарный
файл, содержащий аудио- или
видео/аудиоинформацию

Смысл
их ясен из приведенной таблицы. Следует
заметить, что унифицированных расширений
имен, принятых в различных ОС, очень
мало – по-видимому, только .txt
(текст)
и расширения для исходных кодов на
языках программирования, например, .c
Си,
.p
или
.pas
Паскаль
и др. Объектные модули называются
по-разному (в Windows – .obj,
в UNIX — .o),
библиотеки – тоже: статически линкуемые
в Windows — .lib,
в UNIX — .a;
динамически линкуемые в Windows — .dll,
в UNIX
.so.
Интересно
отметить, что для исполняемого кода в
Windows есть стандартное расширение
.exe,
а
в UNIX – нет, зато есть весьма экзотическое
полное стандартное имя: a.out
(assembler output).
Унифицированы
расширения имен для различных текстовых
процессоров: .doc

Microsoft Word, .pdf

Adobe Acrobat и др.

Методы
доступа к файлам

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

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

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

Типичные
операции последовательного доступа:

read
next

write
next

reset

установка на начало файла для чтения

rewrite

установка на начало файла для записи.

Типичные
операции прямого доступа:

read
n

write
n

position
to n –
позиционирование на запись с номером
n

read
next

write
next

rewrite
n,
где n

относительный номер блока (записи).

Описанная
трактовка последовательных файлов и
операций над ними иллюстрируется рис.
19.1
.

Рис.
19.1.
 
Файл последовательного доступа.

При
необходимости можно смоделировать
операции последовательного доступа
для файла с прямым доступом. Способ
моделирования показан в таблица
19.2
.

Таблица
19.2. Моделирование последовательного
доступа для файла с прямым доступом

последовательный
доступ

реализация
для файла с прямым доступом

reset

cp=0;

read
next

read
cp; cp=cp+1;

write
next

write
cp; cp=cp+1;

Указатель
на текущую позицию, характерный для
последовательного доступа, для файла
прямого доступа моделируется переменной
cp,
а операции последовательного доступа
– операциями прямого доступа с указанием
cp
в
качестве номера блока.

Для
ускорения доступа к файлу большого
объема может использоваться
индексный
файл
,
содержащий ссылки на записи основного
(относительного)
файла. рис.
19.2

изображен пример основного файла,
содержащего упорядоченные по фамилиям
анкетные данные людей. Индексный файл
для данного основного файла содержит
ссылки на первые логические записи
анкет с заданной фамилией, например,
Smith.

Рис.
19.2.
 
Индексный файл и основной файл.

Директории

Директория
(directory, folder)

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

многослоговых имен, состоящих из имени
корневой директории (или логического
диска) и последовательности имен
директорий последующих уровней. Например,
в системе Windows c:docplan.txt

путь доступа к файлу, задающий его
расположение – на логическом диске C:
,
в
директории doc
(документы),
и имя файла – plan.txt.
Имя
содержит расширение, указывающее на
тип файла.

Резервное
копирование (back-up)
файлов
и директорий выполняется на специальные
предназначенные для этого носители –
например, на ленту (стример), flash-память,
внешний переносной жесткий диск,
компакт-диск (CD, DVD). Настоятельно
рекомендуется регулярно копировать на
внешний носитель (или на несколько
внешних носителей) наиболее важные
директории.

Особенности
системы файлов в «Эльбрусе»

Говоря
о структуре директорий и именовании
файлов, нельзя не упомянуть столь
экзотическую систему файлов, как в МВК
«Эльбрус». Это будет полезно
читателям, чтобы сравнить и лучше оценить
разнообразие подходов к системам файлов.

Основные
концепции системы файлов МВК «Эльбрус»
– это файлы,
контейнеры,
справочники.
Понятие контейнера
в
«Эльбрусе» близко к современным
понятиям тома и контейнера в системах
Windows и Solaris: контейнер – это хранилище
файлов на одном или нескольких дисках.
Понятие справочника близко к понятию
директории в традиционных файловых
системах.

Файл
в «Эльбрусе» состоит из заголовка
и памяти. В заголовке хранятся атрибуты
файла, число которых – порядка 100 (!).

Существенным
отличием файловой системы «Эльбруса»
является то, что возможно создание файла
и управление им без
присваивания
ему имени,
т.е. без отображения его в справочниках
(директориях). Такой временный файл
создается в программе, ссылка на файл
хранится в глобальной или локальной
переменной, и по окончании выполнения
программы файл уничтожается, если на
него не была сохранена ссылка в справочнике
на диске. Кроме того, файлы могут ссылаться
друг на друга (по прямой «физической»
файловой ссылке, а не с помощью символьных
путей) через справочники
внешних ссылок (СВС).
СВС
имеется у каждого файла. Его элементы
адресуются по номерам, а не по именам.
Типичный пример: файл
объектного кода (ФОК)
ссылается
через свой СВС на файл дополнения
к файлу объектного кода (ДФОК),
содержащий
в унифицированном виде таблицы именованных
сущностей, определенных в программе и
ее процедурах. Выражаясь современным
языком, ДФОК содержит метаданные.
Эта взаимосвязь используется
при диагностике ошибок времени выполнения
и для многих других целей.

К
недостаткам файловой системы «Эльбруса»
можно отнести усложненную структуру
файлов, большое число атрибутов,
зависимость логической структуры файла
и набора операций над ним от типа внешнего
устройства, на котором он расположен.
По сравнению с системой файлов «Эльбруса»,
система файлов в UNIX гораздо проще и
удобнее, но нисколько не уступает по
функциональности.

Типичная
организация файловой системы изображена
на рис. 19.3.

Рис.
19.3.
 
Организация файловой системы.

Файловые
системы организуются на дисках.
Каждый диск поделен на разделы
(partitions) –
смежные
области дисковой памяти, имеющие свои
логические имена (обычно в виде первых
букв латинского алфавита). Однако
возможна и организация раздела,
занимающего несколько дисков. Для
деления диска на разделы рекомендуем
утилиту Partition
Magic
.
В разделах хранятся директории и файлы.
Каждый раздел имеет корневую
директорию
,
у которой при необходимости могут быть
организованы поддиректории,
на которые она ссылается.

Следует
иметь в виду, что в разных разделах могут
быть установлены различные операционные
системы, использующие
разное форматирование и разные файловые
системы для своей работы. Даже если на
компьютере установлена только одна ОС,
различные разделы могут использовать
различные типы файловых систем, например,
в Windows раздел A может использовать
файловую систему FAT32, а раздел B – файловую
систему NTFS. В разделе C может быть
инсталирована ОС Linux,
использующая
свою собственную файловую систему
Ext2Fs.

Операции
над директориями

Над
директориями определен ряд операций,
которые аналогичны друг другу во всех
операционных системах, хотя по именам
могут отличаться. Операции над директориями
доступны как из командного языка, так
и через специализированный API. В своем
изложении мы будем использовать команды
для работы с файлами. Аналогичные
действия могут быть выполнены с помощью
GUI через графическую оболочку ОС.

Установка
текущей (рабочей) директории
.
При работе с директориями основным
является понятие текущей (рабочей)
директории, которая устанавливается в
командных языках командой cd
(change directory), например,
если в данный момент текущей является
корневая директория диска C:
,
то команда:

cd
doc

установит
в качестве текущей поддиректорию doc.
Текущая директория в командном языке
обозначается точкой (.) .

Поиск
файла
.
Как уже отмечалось, поиск файла выполняется
с помощью символьного пути
(path),
образованного
последовательностью имен директорий,
например, C:docplan.txt.
Если требуется найти файл в текущей
директории, указывается его имя. Например,
в Windows команда:

type
plan.txt

выводит
содержимое файла plan.txt
в
текущей директории (C:doc)
на консоль.

Создание
файла.
Как
правило, создание файла в текущей
директории выполняется программой,
которая в дальнейшем будет работать с
этим файлом – например, в Windows – текстовыми
редакторами notepad,
wordpad, Microsoft Word
.
Многие файлы создаются в текущей
директории неявно, в результате компиляции
или каких-либо других системных операций.
Например, если в текущей директории
имеется файл исходного кода на языке
Java – program.java,
то в результате его компиляции:

javac
program.java

Java-компилятор
создает в текущей директории class-файл,
содержащий двоичный байт-код
Java-программы
– файл program.class.

Многие
программы создают в текущей директории
временные
файлы
,
подчас с весьма экзотическими именами,
— например, Microsoft Word в результате открытия
файла с документом. По окончании работы
программы временные файлы удаляются.

Создание
директории.
В
рабочей директории можно создать другую
директорию. На командном языке это
делается командой mkdir,
например:

mkdir
tmp.

Удаление
файла
из
текущей директории выполняется
специальной командой — del

Windows) или rm

UNIX). Удаление уничтожает только ссылку
на файл из директории, но не сам файл.
Если на него есть другие ссылки, он
сохраняется. Типичной ошибкой пользователей
является поспешное неверное удаление
файла. Если оно выполнено в системе
Windows, то, как правило, файл можно
восстановить специальными утилитами
(кроме его имени), так как, например, в
системе FAT файл представляется как
список смежных областей. Если же удаление
файла выполнено в UNIX, то, к сожалению,
файл восстановлению не подлежит, так
как в UNIX используется представление в
виде индексных
блоков,
содержащих
ссылки на все блоки данных файла.

Вывод
содержимого директории.
Команда
dir

Windows) и ls

UNIX) выводит содержимое директории на
консоль. С помощью перенаправления
стандартного вывода содержимое директории
можно сохранить в текстовом файле,
например:

ls
doc > doc_list.txt

Переименование
файла
.
Имя файла в директории можно изменить,
если новое имя уже не встречается в
директории. В UNIX это делается командой
mv,
например:

mv
old_file.txt new_file.txt

Создание
символической ссылки.
Из
элемента директории можно создать
символическую
ссылку
на
другую директорию. Это может оказаться
необходимым, если требуется смоделировать
структуру директорий, созданную на
другом компьютере, например, на компьютере
заказчика, так как системные файлы в
программном продукте, например, make-файлы
для его сборки, ссылаются на определенные
пути доступа к директориям. В UNIX
символическая ссылка создается командой
ln,
например:

cd
/my_dir

ln
–s /doc doc

Создается
символическая ссылка из директории
my_dir
на
директорию /doc,
под тем же именем doc.
Таким образом, пути /doc
и
/my_dir/doc
указывают
на одну и ту же директорию. В UNIX такой
прием используется очень часто.

Обход
файловой системы
.
Более сложная операция осуществляет
обход дерева директорий, начиная с
заданной корневой, например, с целью
поиска заданного файла. Например, в
системе UNIX команда:

find
. –name plan.txt –print

выполняет
поиск в текущей директории и всех ее
поддиректориях файла plan.txt
и
выводит на консоль полный путь доступа
к каждому найденному файлу с таким
именем.

В
системе «Эльбрус», как уже было
сказано в разделе Особенности
системы файлов в «Эльбрусе»
,
создание файла – отдельная операция,
не связанная с директорией (справочником)
вообще. Только если явно создан элемент
справочника, и в него записана ссылка
на созданный файл, то она сохраняется,
пока сохраняется ссылка на сам справочник.

Логическая
организация директорий

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

В
связи с этим, одноуровневая
организация
директорий для всех пользователей не
рекомендуется, так как могут возникнуть
проблемы с удобной группировкой файлов
и с совпадением имен. Одноуровневая
структура директорий изображена на
рис.
19.4
.

Рис.
19.4.
 
Одноуровневая организация директорий.

При
двухуровневой
организации
директорий в многопользовательской
системе появляется возможность
иметь одинаковые имена файлов сходного
назначения для различных пользователей.
При такой организации создается главная
директория
,
в которой хранятся персональные
поддиректории пользователей. В каждой
из них, в свою очередь, хранятся файлы
конкретного пользователя. Двухуровневая
схема изображена на рис.
19.5
.

Рис.
19.5.
 
Двухуровневая организация директорий.

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

Наиболее
общей и удобной, рекомендуемой читателям,
является древовидная
структура директорий
(рис.
19.6
).

Рис.
19.6.
 
Древовидная структура директорий.

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

Различаются
абсолютный
и
относительный
путь.
Абсолютный путь указывает полный путь
доступа к файлу, начиная от логического
имени раздела, либо от корневой системной
директории, например (в системе UNIX):
/usr/bin/sh

путь доступа к файлу командного процессора
Bourne
Shell.
Относительный
путь указывает путь доступа к файлу
относительно некоторой текущей
директории. В том же примере, если
считать, что текущая директория — /usr, то
относительный путь к тому же файлу имеет
вид: bin/sh.
Недостаток абсолютных путей в том, что
на разных компьютерах (например, заказчика
и исполнителя) абсолютные пути к одному
и тому же файлу или к одной и той же
директории могут оказаться различными.
В результате возникают ошибки при сборке
проекта, его архивировании, разархивировании
и др. Поэтому рекомендуется в системных
файлах, например, в make-файлах для сборки
проектов, указывать, по возможности,
относительные пути, либо обозначать
рабочую директорию один раз с помощью
некоторого макроса и использовать это
обозначение в путях, например: ${SYSDIR}/sh,
где макрос SYSDIR
задает
конкретный путь к системной директории
на данном компьютере.

Пример
древовидной структуры директорий
приведен на рис.
19.6
.

Примеры
операций над директориями (в обозначениях
рис.
19.6
):

cd
/spell/mail/prog –
установка текущей директории.

type
list – вывод
на консоль содержимое одного из ее
файлов.

Если
текущая директория /mail,
то поддиректория count
создается
командой:

mkdir
count

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

Рис.
19.7.
 
Структура директорий в виде ациклического
графа.

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

В
рис.
19.7
,
если в директории dict
удалить
ссылку list,
то образуется повисшая
ссылка (dangling pointer).
Возможные
решения данной проблемы:

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

  • хранение
    счетчиков ссылок на файл; при обнулении
    счетчика ссылок на файл последний
    считается не используемым, и его память
    перераспределяется.

Структура
директорий в виде произвольного графа
создает
еще более серьезные проблемы, например,
как гарантировать отсутствие циклов в
графе директорий. Пример структуры
директорий в виде произвольного графа
приведен на рис.
19.8
.

Рис.
19.8.
 
Структура директорий в виде произвольного
графа.

Циклические
ссылки на файлы могут возникнуть из-за
ошибок в программе, связанной с обработкой
файлов. Если при этом она тестируется
и многократно запускается, то это может
привести к переполнению внешней памяти
на диске (или в разделе диска), что и
произошло у автора при отладке компилятора
с языка CLU на МВК «Эльбрус» в 1980-х
гг. Возможные решения проблемы циклических
ссылок:

  • Допускать
    только ссылки на файлы, а не на
    поддиректории; данное решение слишком
    ограничительно.

  • Выполнять
    сборку мусора во внешней памяти; однако
    традиционные алгоритмы сборки мусора
    не делают проверок на наличие циклов,
    поэтому в цепочке циклически ссылающихся
    друг на друга файлов все они будут
    считаться используемыми.

  • Каждый
    раз при создании новой ссылки запускать
    алгоритм проверки отсутствия циклов
    – по-видимому, слишком «дорогое»
    решение.

Монтирование
файловых систем

Файловая
система

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

В
системе UNIX имеются команды mount;
automount
и
autodirect,
управляющие монтированием. Команда
mount
позволяет
явно задать точку монтирования и файловую
систему, монтируемую в эту точку. Список
всех смонтированных файловых систем
хранится в системном текстовом файле
/etc/mnttab

разных диалектах пути к этому файлу и
даже его имя могут различаться). Команда
automount
запускается
при загрузке операционной системы и
создает системный процесс-демон
automountd,
который по содержимому указанного
системного файла автоматически монтирует
указанные в нем файловые системы при
загрузке ОС и следит за их постоянной
смонтированностью. Команда autodirect
позволяет
смоделировать пути к «виртуальным»
директориям, которых физически на данной
машине не существует, и указать в
системном файле /etc/vfstab
их
«заменители» (в виде путей к реальным
директориям, размещенным на локальной
машине), что весьма полезно в случае
получения большого проекта от заказчика
с абсолютными путями, не существующими
на Вашей машине.

На
рис.
19.9

изображены дерево смонтированных систем
с директориями пользователей (a) и еще
не смонтированная файловая система (b)
с директориями новых пользователей.

Рис.
19.9.
 
Дерево смонтированных систем и еще не
смонтированная файловая система.

Если
по команде mount
или
automount
в
качестве точки монтирования файловой
системы (b) указывается поддиректория
users,
то возникает картина, изображенная на
рис.
19.10
.

Рис.
19.10.
 
Точка монтирования файловой системы.

Общий
доступ к файлам

В
многопользовательских системах общий
доступ к файлам (sharing)
необходим.
Общий доступ может быть обеспечен через
некоторую систему защиты (protection). В
распределенных системах файлы могут
использоваться
совместно через сеть. Управление общим
доступом к файлам в разных ОС различно:
например, в Windows утилита Explorer
обеспечивает
возможность
установки общего доступа к заданному
файлу или папке с помощью GUI, сделав
отметку в соответствующем checkbox, указать
сетевое имя данного общего ресурса и
указать, возможен ли доступ по чтению
и по записи, или только по чтению. В
системе UNIX передача файла из заданной
файловой системы в общий доступ
выполняется командой share.

Network
File System (NFS)

распространенная система общего доступа
к файлам через локальную сеть, которая
подробно рассмотрена в лекции 20.

Интересная
возможность общего доступа к файлам
имеется в системе Solaris: файловая система,
отданная в общий доступ командой share,
может адресоваться с помощью
пути вида /net/hostname/filesystem,
где hostname

имя машины; filesystem

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

Защита
файлов

Создатель
файла должен иметь возможность управлять
списком допустимых операций над файлом
и списком пользователей, которым они
разрешены. Это и обеспечивают механизмы
защиты файлов. Различаются следующие
основные типы доступа к файлу:

  • Read
    (для чтения)

  • Write
    (для записи)

  • Execute
    (для исполнения)

  • Append
    (для записи в конец файла, или присоединения)

  • Delete
    (для удаления)

  • List
    (для вывода списка файлов в директории).

Для
управления защитой файлов в UNIX введены
удобные и наглядные обозначения, которые
мы и рассмотрим.

Различаются
следующие режимы доступа: read, write, execute
(RWX).

Различаются
также три класса пользователей: владелец
файла
(owner), группа,
к которой он принадлежит (group) и весь
остальной «мир» пользователей
(public). Группы пользователей создаются
системным администратором.

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

chmod
740 my_file

задает
для файла my_file
следующие
полномочия: для владельца – 7 (111): чтение,
запись и выполнение; для группы – 4
(100): только чтение; для остальных
пользователей – 0 (000): никаких действий
над файлом не разрешено.

Для
директории полномочия «X» (execute)
означает возможность входа в нее командой
cd.

Реализация
файловых систем

В
данном разделе начнем рассматривать
принципы и методы реализации файловых
систем, изложение которых продолжено
в «Виртуальные
файловые системы (VFS). Реализации файловых
систем. Сетевая файловая система NFS»
.
В данной и следующей лекциях будут
рассмотрены следующие вопросы:

  • Структура
    файловых систем

  • Реализация
    файловых систем

  • Реализация
    директорий

  • Методы
    размещения файлов

  • Управление
    свободной памятью

  • Эффективность
    и производительность

  • Восстановление

  • Файловые
    системы на основе журналов транзакций
    (Log-Structured)

  • сетевая
    файловая система NFS.

Структура
файловой системы

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

Рис.
19.11.
 
Многоуровневая файловая система.

На
верхнем уровне абстракции работают
пользовательские программы, использующие
высокоуровневые примитивы вида
WriteLine(F,
X).
Уровнем
ниже располагаются модули интерфейса
логических файлов – логических записей,
блоков и операций обмена. Еще ниже
следуют модули организации файлов,
затем – операции базовой системы файлов.
Ни нижних уровнях располагаются драйверы
устройств (управление вводом-выводом)
и аппаратура (устройства ввода-вывода
и их контроллеры).

Блок
управления файлом (File control block — FCB)

структура в памяти, содержащая информацию
о файле. Типовая структура блока
управления файлом представлена в таблице
3
.

Таблица
3. Типовая структура блока управления
файлом

полномочия
для работы с файлом

даты
создания, доступа и модификации файла

владелец
файла, группа, список управления
доступом

размер
файла

блоки
данных файла

Системные
структуры в памяти для управления
файловой системой

При
открытии файла и при дальнейшем выполнении
операций над ним ОС хранит в памяти
целый ряд системных структур, изображенных
на рис.
19.12
.

Рис.
19.12.
 
Структуры ОС в памяти для управления
файловой системой.

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

Соседние файлы в папке все лекции по ОС

  • #
  • #

    04.06.2015219.14 Кб15515.doc

  • #

    04.06.2015686.08 Кб16216.doc

  • #

    04.06.2015406.53 Кб16617.doc

  • #

    04.06.2015770.56 Кб17818.doc

  • #

    04.06.2015697.86 Кб17319.doc

  • #

    04.06.2015169.47 Кб1492.doc

  • #

    04.06.2015781.31 Кб15220.doc

  • #

    04.06.2015580.61 Кб20621.doc

  • #

    04.06.2015334.85 Кб16022.doc

  • #

    04.06.2015506.37 Кб18723.doc

 
Dush
 
(2005-10-12 13:10)
[0]

Доброго времени суток!
Вопрос в следующем: имеется файл, который сформирован в какой-то программе. необходимо использовать этот файл в своей, но я не знаю структуру записи этого файла.
Можно ли как-то вытащить ее (структуру)?


 
Ega23 ©
 
(2005-10-12 13:12)
[1]


> я не знаю структуру записи этого файла.
> Можно ли как-то вытащить ее (структуру)?

Если ты её не знаешь, то как ты будешь её вытаскивать?


 
Dush
 
(2005-10-12 13:14)
[2]

я потому и спрашиваю — можно или нельзя :)


 
kpt. Petia
 
(2005-10-12 14:00)
[3]

hex-редактор в зубы и вперед!
сделай несколько файлов той прогой и анализируй их. если структура довольно простая, то и разобраться можно довольно быстро


 
Игорь Шевченко ©
 
(2005-10-12 14:05)
[4]


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

Нельзя в общем случае.


 
kami ©
 
(2005-10-12 14:14)
[5]

kpt. Petia   (12.10.05 14:00) [3]

Откуда ты можешь знать, что именно из данных и в каком виде хранится в этом файле? Если в нем есть какие-нибудь необязательные данные? А если он к тому же слегка:) зашифрован или сжат, причем — по какому алгоритму ?
Dush   (12.10.05 13:10)
Связаться с автором и попросить его выслать мылом структуру (если он её еще помнит); посмотреть в хелпе (если она там есть). Иначе — никак, имхо.


 
Anatoly Podgoretsky ©
 
(2005-10-12 14:15)
[6]

Нельзя и это задача не программная.


 
Ega23 ©
 
(2005-10-12 14:18)
[7]

какая разница в структуре, с точки зрения файла, между полем integer и четырьмя полями byte?


 
Sergey13 ©
 
(2005-10-12 14:31)
[8]

2Dush   (12.10.05 13:10)
Если структура не очевидна на первый взгляд (структурированный текстовый файл) я бы попробовал сделать у него расширение как у наиболее популярных форматов БД и посмотреть что получится. Вполне вероятно, что это может быть «переименованный» dbf например или db. Я с таким встречался как-то.


 
ПЛОВ ©
 
(2005-10-12 14:32)
[9]

а рсширение какое? его в Яндекс или Гугл, мож и повезет…


 
ANB ©
 
(2005-10-12 14:33)
[10]

Можно. Спросить у автора программы.


 
kpt. Petia
 
(2005-10-12 14:35)
[11]


> kami ©   (12.10.05 14:14) [5]

я имел ввиду простую структуру. например я делал редакторы для игры warlords 3.. Там всё довольно просто.


 
sniknik ©
 
(2005-10-12 14:59)
[12]

вообщето это взломом «пахнет», если структура не отрыта и не описана в документации. т.е. «тебя посодют а ты не воруй …» © Папанов Берегись автомобиля.


 
umbra ©
 
(2005-10-12 15:15)
[13]

довольно много форматов разных файлов
http://www.wotsit.org/


 
Dush
 
(2005-10-12 16:58)
[14]

2 sniknik
Сама прога платная, но в хелпе программы скзано:
если вы хотите получить информацию о формате — пишите — поделюсь!
Я уже 2 недели пишу автору — а он не отвечает :(
вот я и подумал — может можно без автора расковырять…
Заказчик хочет свою программу, но чтоб поддерживала и этот формат.
Спасибо всем!


Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как исправить печку на ваз 2107
  • Как найти определитель методом треугольников
  • Как найти песню напевая только мелодию
  • Как найти наилучшую оценку результатов измерения
  • Как найти углы тупоугольного равнобедренного треугольника

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии