Библиотека сайта 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.
Анонимные каналы и именованные каналы |
Символические ссылки. Ограничения жестких ссылок |