Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Специальные файлы: Файлы символьного и блочного режима

Пред. 

Глава 9. Файловая система Linux

 След.


Специальные файлы: Файлы символьного и блочного режима

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

$ dd if=/dev/fd0 of=/dev/null

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

А теперь, если вы хотите распечатать большой файл таким способом (да, это будет работать):

$ cat /большой/пригодный/для/распечатки/файл/где-то >/dev/lp0

Выполнение команды займет столько времени, сколько ей потребуется, независимо от того, сколько раз вы ее запускали: один, два или пятьдесят. Это связано с тем, что /dev/lp0 - это файл символьного режима, и его содержимое не буферизуется.

Явление буферизации файлов блочного режима обладает хорошим побочным эффектом: буферизуется не только чтение, но и запись. Это позволяет записи на диск выполняться асинхронно: когда вы записываете на диск файл, операция самой записи не происходит немедленно. Она произойдет тогда, когда ядро Linux решит выполнить запись на устройство.

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

ls -l /dev/ide/host0/bus0/target0/lun0/disc /dev/printers/0 
brw-------  1 root root 3, 0 dic 31  1969 /dev/ide/host0/bus0/target0/lun0/disc
crw-rw----  1 lp   sys  6, 0 dic 31  1969 /dev/printers/0

Здесь для файла /dev/hda старший и младший номера - 3 и 0, а для файла /dev/lp0 - 6 и 0. Обратите внимание, что эти номера уникальны для каждой категории файлов, это означает, что может существовать файл символьного режима со старшим номером 3 и младшим 0 (этот файл существует на самом деле: /dev/ttyp0), а также может существовать файл блочного режима со старшим номером 6 и младшим 0. Причина существования этих номеров довольно проста: они позволяют ядру связывать соответствующие операции с этими файлами (т.е. с периферийными устройствами, на которые эти файлы ссылаются): вы не работаете с дисководом таким же образом, как, скажем, с жестким диском SCSI.


Пред. 

Уровень выше

 След.

Анонимные каналы и именованные каналы 

Начало

 Символические ссылки. Ограничения жестких ссылок