9423f23c

Специальные файлы


В Unix помимо обычных файлов и каталогов существуют еще и специальные файлы. Они используются для обозначения физических устройств компьютера. (Железок). В сущности, что такое файл? Это

"нечто", куда можно записывать данные, как последовательность

байтов, и считывать их оттуда. И значит, вполне естественным

выглядит, например, файл /dev/console - соответствующий консольному терминалу. Все, что выводится в файл /dev/console,

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

из файла /dev/console, вы будете получать (внимание!), не то,

что нарисовано в данный момент на экране, а то, что вводится с

клавиатуры. Попробуйте выполнить команды

su

echo Привет > /dev/console

cat /dev/console

Ctrl-C

Для каждого терминала unix-машины существует соответствующий

ему файл. Обычным терминалам соответствуют файлы, которые

называются примерно так:

/dev/contty01 или /dev/tty02 или /dev/ttyFD02 или /dev/ttyS0

(и т.д., возможны варианты)

Псевдо-терминалам (они эмулируются, когда вы входите в систему



по сети, посредством команд типа telnet, rlogin), соответствуют

специальные файлы

/dev/pty*, или /dev/pty/*

Команда who, или who am i сообщит вам, как называется ваш

собственный терминал.

Существуют специальные файлы, соответствующие жесткому диску в

целом (/dev/rdsk/m197_c0d0s7), и всем его разделам

(/dev/dsk/m197_c0d0s*). Если вы будете читать из этих файлов,

то получите все байтики, как они лежат на жестком диске, с

нулевого цилиндра и до последнего... А если вы в этот файл


что-нибудь запишете, то получите (потом) богатый опыт по

переформатированию и разметке жесткого диска.

/dev/mem- файл, изображающий оперативную память.
/dev/audio- если "закатить" в него файл звукового формата

(*.wav, *.au, ...?) - то он будет озвучен динамиком компьютера, а команда cat /dev/audio будет

принимать все, что произносится в микрофон. Впрочем я отвлекся, у нас ведь не PC, не Silicon

Graphic и не SPARCstation.
/dev/zero- из него можно считать сколько угодно нулевых байтов
/dev/null- а в него можно писать и читать из него тоже, в

неограниченных количествах, и с неизменным результатом: NULL - он и есть null. А в MSDOS его аналог

называется NUL ).
Специальные файлы бывают двух типов:

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

    таковыми.

    ls -al /dev/fd*

    brw-rw---- 1 root floppy 2, 28 Jul 18 1994 /dev/fd0H1440

    brw-rw---- 1 root floppy 2, 32 Jul 18 1994 /dev/fd0H2880

    brw-rw---- 1 root floppy 2, 12 Jul 18 1994 /dev/fd0H360


  • символьные(бесструктурные, сырые, row) - можно читать и писать

    отдельными байтами. К ним относятся терминалы, маг-

    нитные ленты, неформатированные диски и разделы дис-

    ков без файловой системы.

    ls -al /dev/tty*

    crw--w--w- 1 moshkow sys 4, 1 Jan 15 22:00 /dev/tty1

    crw--w--w- 1 root root 4, 2 Jan 15 20:37 /dev/tty2

    crw--w--w- 1 root root 4, 2 Jan 15 20:37 /dev/tty2


  • Различие - первая буква в листинге команды ls -l

    Понятия "размер" у специального файла не существует. Ведь этот

    файл обозначает физическое устройство. Фактически, это ссылка

    на соответствующий драйвер. Вместо длины, команда ls показывает

    для таких файлов два числа: "мажорный" и "минорный" номера устройств. Будем считать для ясности, что "мажор" это порядковый

    номер драйвера устройства, а "минор" - внутренний номер устройства в таблице обслуживающего его драйвера.

    Содержание раздела