рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Типы файлов

Типы файлов - раздел Программирование, Программирование для операционной системы Linux Файловая Система В Linux Многих Пугает Своей Мнимой Сложностью. Устройства, С...

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

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

Первый тип - обычные файлы (regular files). Эти файлы предназначены для хранения информации на носителях памяти. К обычным файлам относятся упомянутые выше музыкальные и текстовые файлы; сюда же относят исполняемые файлы программ, конфигурационные файлы, файлы журналов и прочие "хранители различной информации".

Обычные файлы, как мы уже знаем, создаются при помощи системных вызовов open() и creat(). С точки зрения пользователя, существует великое множество способов создания обычных файлов: текстовые редакторы, программы работы с графикой и прочие. Чтобы создать пустой файл, можно, например, воспользоваться утилитой touch, как показано ниже.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

$ touch regularfile

$ ls -l regularfile

-rw-r--r-- 1 df00 df00 0 2010-02-09 21:45 regularfile

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

Программа ls, вызванная с флагом -l, вывела на экран дополнительную информацию о файле regularfile. Обратите внимание на поле прав доступа: в самом начале стоит минус, который как раз и сообщает нам, что regularfile - это обычный файл.

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

Второй тип файлов - это каталоги (directories). Каталоги особым образом хранят информацию о других файлах. Если каталог A содержит информацию о файлах B и C, то говорят, что файлы B и C содержатся в каталоге A. Если же, например, C тоже окажется каталогом, то мы скажем, что C - это подкаталог каталога A.

Каталоги создаются системным вызовом mkdir() или одноимённой утилитой.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

$ mkdir directory

$ ls -ld directory

drwxr-xr-x 2 df00 df00 4096 2010-02-09 21:47 directory/

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

В показанном выше примере мы создаём каталог с именем directory. Ключ –d программы ls позволяет просмотреть информацию о каталоге, а не о содержимом этого каталога. Первым символом в поле прав доступа теперь является d, сообщающий нам, что это каталог.

Для чтения содержимого каталога используются системные вызовы readdir() и getdents(). Однако эти системные вызовы не предназначены для применения в пользовательских приложениях, поэтому программисты пользуются библиотечными оболочками этих вызовов - одноимённой функцией readdir(), а также функцией rewinddir(). Для открытия и закрытия каталогов применяют библиотечные функции opendir() и closedir(). Пользователь может просмотреть содержимое каталога при помощи утилиты ls.

Для удаления каталогов используется системный вызов rmdir(). Пользователь может удалить пустой каталог одноимённой утилитой rmdir.

Третий тип файлов - символические ссылки (symbolic links). Символическая ссылка хранит информацию о местоположении какого-либо файла в файловой системе и, в большинстве случаев, является "полномочным представителем" этого файла.

Символические ссылки создаются при помощи системного вызова symlink(). Пользователь может создать символическую ссылку программой ln с флагом -s.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

$ echo "Hello" >anyfile

$ ln -s anyfile anysymlink

$ cat anysymlink

Hello

$ ls -l anysymlink

lrwxrwxrwx 1 df00 df00 11 2010-02-09 21:50 anysymlink -> anyfile

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

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

В выводе программы ls с флагом -l символическая ссылка обозначается в графе прав доступа символом l. Символические ссылки удаляются подобно обычным файлам: посредством системного вызова unlink() или утилитой rm.

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

Важно понять, что символьные и блочные устройства связаны с драйверами, которые находятся в ядре. Это могут быть драйверы, связанные с реальными аппаратными устройствами (например, принтер, жесткий диск, раздел жесткого диска), так и виртуальные драйверы (генератор случайных чисел, генератор нулей /dev/zero, блочная петля (loop device)).

Каждому драйверу в ядре присвоена пара номеров, причем у драйверов символьных устройств своя нумерация, у блочных - своя. В реальности несколькими парами номеров может управлять один драйвер, но сейчас речь не об этом. Первый номер в паре называют старшим (major), а второй - младшим (minor). Некоторые номера жестко прописаны за конкретными устройствами (например, /dev/null всегда имеет старший номер 1 и младший 3), другие же являются "плавающими" и выделяются ядром динамически из свободного списка по мере необходимости.

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

Типичным представителем символьных устройств является /dev/null, виртуальное устройство, которое бесследно "съедает" любую передаваемую ему информацию.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

$ ls -l /dev/null

crw-rw-rw- 1 rootroot 1, 3 2010-02-09 17:08 /dev/nul

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

Как видим, в выводе ls с флагом -l символьные устройства показаны символом c. В поле, где у обычных файлов пишется размер, у устройств фигурируют их номера, в данном случае 1 и 3. Блочные устройства обозначаются в выводе ls -l символом b.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

$ ls -l /dev/sda

brw-rw---- 1 root disk 8, 0 2010-02-09 17:08 /dev/sda

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

Удаляются файлы устройств при помощи системного вызова unlink() или утилитой rm.

Шестым типом файлов являются именованные каналы FIFO (FirstIn, FirstOut). Эти файлы используются для локального взаимодействия процессов, когда один процесс записывает в файл информацию, а другой процесс читает.

FIFO создаются при помощи системного вызова mkfifo() или утилитой mkfifo.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

$ ls -l myf

prw-r--r-- 1 df00 df00 0 2010-02-09 21:57 myf

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

В выводе ls –lFIFO обозначаются символом p. Для удаления именованного канала используется системный вызов unlink() или утилита rm.

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

В выводе ls -l сокеты обозначаются символом s. Создаются локальные сокеты при помощи системных вызовов socket() и bind(), а удаляются при помощи системного вызова unlink() или утилитой rm.

 

– Конец работы –

Эта тема принадлежит разделу:

Программирование для операционной системы Linux

Министерство образования и науки РФ... Федеральное агентство по образованию... Государственное образовательное учреждение высшего профессионального образования...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Типы файлов

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Процессы в Linux
В жизни обычного пользователя Linux часто встречается термин «процессы». Так что же такое «процесс»? Попробуем разобраться. Сухая формулировка говорит нам, что процесс - это совокупность п

Массив environ
Теперь, когда мы разобрались, что такое окружение, самое время написать программу для взаимодействия с окружением. Чтобы показать, как это все работает, сначала изобретем велосипед. В заго

Обзор механизмов ввода-вывода в Linux
В языке C для осуществления файлового ввода-вывода используются механизмы стандартной библиотеки языка, объявленные в заголовочном файле stdio.h. Как вы вскоре узнаете консольный ввод-вывод - это н

Файловые дескрипторы
В языке C при осуществлении ввода-вывода мы используем указатель FILE*. Даже функция printf() в итоге сводится к вызову vfprintf(stdout,...), разновидности функции fprintf(); константа stdout имеет

МНОГОЗАДАЧНОСТЬ
Операционная система Linux является многозадачной. За многозадачность отвечает ядро. Что же представляет собой многозадачность? Мы привыкли под этим термином понимать концепцию одновременного выпол

Основы многозадачности в Linux
Наберите в своей оболочке следующую команду: −−−−−−−−−−−−−−−−−−−−

Порождение процесса
Как уже говорилось ранее, процесс в Linux - это нечто, выполняющее программный код. Этот код называют образом процесса (process image). Рассмотрим простой пример, когда вы находитесь в оболочке bas

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

Режим файла
Под режимом файла (file mode) понимается связанный непосредственно с индексным дескриптором (а не со ссылкой) 16-битный набор, регламентирующий порядок доступа и работы с файлом. Иногда режим файла

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

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

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги