Вход/Регистрация
UNIX — универсальная среда программирования
вернуться

Керниган Брайан Уилсон

Шрифт:

$ date >/dev/tty0

Wed Sep 28 02:40:51 EDT 1983

$

Заметьте, что вы владелец устройства и только у вас есть право на чтение с него. Иными словами, никто не может непосредственно читать вводимые вами символы, но выводить на ваш терминал может любой. Во избежание этого можно изменить права доступа к устройству, запретив тем самым другим использовать программу

write
для прямой записи или просто воспользоваться командой
mesg
.

$ mesg n
Запретим сообщения

$ ls -l /dev/tty0

crw--w---- 1 you 1, 12 Sep 28 02:41 /dev/tty0

$ mesg y
Разрешим

$ ls -l /dev/tty0

crw--w--w- 1 you 1, 12 Sep 28 02:42 /dev/tty0

$

Часто бывает удобно использовать имя для ссылки на применяемый терминал, но трудно определить, каково имя вашего терминала. Имя устройства

/dev/tty
является синонимом имени терминала, с которого вы вошли в систему, с каким бы терминалом вы ни работали на самом деле:

$ date >/dev/tty

Wed Sep 28 02:42:23 EDT 1983

$

Имя

/dev/tty
особенно полезно, если программе необходимо начать диалог с пользователем, в то время когда ее стандартный входной и выходной потоки связаны с файлами, а не с терминалом. Команда
crypt
является одной из команд, использующих имя
/dev/tty
. "Открытый" текст поступает из стандартного входного потока, а зашифрованная информация направляется в стандартный выходной поток, поэтому команда
crypt
читает ключ для шифрования с
/dev/tty
:

$ crypt <cleartext >cryptedtext

Enter key:
Введите ключ шифрования

$

В данном примере имя

/dev/tty
используется неявно, но все-таки используется. Если бы команда
crypt
читала ключ из стандартного входного потока, она бы прочла первую строку из файла
cleartext
. Вместо этого она открывает файл
/dev/tty
, отключает автоматическое эхо вводимых символов, чтобы ваш ключ не появился на экране, и читает ключ. В гл. 5 и 6 приводится несколько других примеров использования
/dev/tty
.

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

news
в файл
/dev/null
приведет к игнорированию выходного потока:

$ news >/dev/null

$

Информация, направляемая в

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

Обычно файл

/dev/null
используют, чтобы отказаться от стандартного выходного потока и сделать видимыми диагностические сообщения. Например, команда
time
(
time(1)
) сообщает об использованном программой процессорном времени. Результат выдается в стандартный поток диагностики, так что можно хронометрировать команды, производящие преобразование входного потока в выходной, переключая стандартный выходной поток в файл
/dev/null
:

$ ls -l /usr/diet/words

– r--r--r-- 1 bin 196513 Jan 20 1979 /usr/dict/words

$ time grep e /usr/dict/words/ >/dev/null

real 13.0

user 9.0

sys 2.7

$ time egrep e /usr/dict/words >/dev/null

real 8.0

user 3.9

sys 2.8

$

Команда

time
выдает прошедшее календарное время, время процессора, затраченное программой, и время процессора, затраченное ядром системы для выполнения запросов программы. Команда
egrep
— это мощный вариант команды grep, который мы обсудим в гл. 4; она выполняется почти в два раза быстрее команды grep при просмотре больших файлов. Если бы выдача команд
egrep
или
grep
не была переключена в
/dev/null
или текущий файл, пришлось бы ждать, пока сотни тысяч символов "пробегут" на экране, прежде чем появятся нужные нам временные характеристики.

Упражнение 2.9

Познакомьтесь с другими файлами каталога

/dev
, прочитав разд. 4 справочного руководства. В чем состоит разница между
/dev/mt0
и
/dev/rmt0
? Прокомментируйте возможную пользу применения вложенных каталогов в
/dev
для дисков, магнитных лент и т.п.

Упражнение 2.10

Магнитные ленты, записанные в других системах, обычно имеют другие размеры блоков, такие, как 800 байт — десятикратный образ перфокарты из 80 символов, но устройство

/dev/mt0
предполагает блоки из 512 байт. Обратитесь к команде
dd
(
dd(1)
), чтобы узнать, как читать такую ленту.

  • Читать дальше
  • 1
  • ...
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: