Программирование в стандарте POSIX


Служебные программы, обслуживающие взаимодействие пользователей


Активными мы будем называть пользователей, работающих в системе в некоторый момент времени.

Чтобы узнать, какие пользователи активны и за какими терминалами они работают, можно воспользоваться служебной программой

who

(заметим, что стандарт POSIX-2001 трактует ее как необязательную, входящую в расширение "Мобильность пользователей").

Выдача утилиты who может выглядеть, например, так (правый столбец означает время входа в систему):

galat ttyS4 Aug 22 12:41 kost ttyS6 Aug 22 10:09

К той же дополнительной категории, что и who, принадлежат утилиты write, talk и mesg (а также описанная выше служебная программа newgrp).

После установления соединения утилита

write имя_пользователя [терминал]

позволяет построчно пересылать стандартный ввод отправителя на терминал пользователя-получателя. Аргументы имя_пользователя и терминал задаются в том виде, как их выводит служебная программа who. Необязательный аргумент [терминал] нужен в тех случаях, когда пользователь-получатель вошел в систему с нескольких терминалов.

Утилиту

talk имя_пользователя [терминал]

можно рассматривать как более современный аналог write, поскольку она имеет экранный интерфейс и поддерживает двустороннее взаимодействие активных пользователей.



С помощью служебной программы

mesg [y|n]

пользователь может разрешить или запретить установление соединений со своим терминалом. При вызове без аргументов mesg выдает текущий статус терминала.

Приведем пример употребления описанных служебных программ. Рассылку сообщения-аргумента всем активным пользователям можно реализовать посредством shell-процедуры (см. пример 3.7).

who | while read a b c do write $a $b << ! $1 ! done

Листинг 3.7. Пример использования утилит who и write. (html, txt)

Обратим внимание на использование во вставке значения аргумента shell-процедуры.

Базовым средством обеспечения почтового взаимодействия между пользователями, согласно стандарту POSIX-2001, является служебная программа mailx. Она позволяет и отправлять, и получать письма.
В первом случае ее следует вызывать командной строкой

mailx [-s тема] адрес ...

во втором -

mailx -e

или

mailx [опция ...]

или

mailx -f [опция ...] [почтовый_ящик]

В процессе отправки текст письма читается со стандартного ввода. При получении всеми указанными выше способами, кроме последнего, проверяется системный почтовый ящик, выделенный текущему пользователю, а при наличии опции -f в качестве почтового ящика используется явно заданный файл. Опция -e предписывает только проверить почтовый ящик и, если он не пуст, вернуть код успеха.

В режиме получения можно отправлять письма и управлять содержимым почтового ящика (для чего утилита mailx предоставляет весьма богатый набор команд), однако поддержку этого режима стандарт POSIX-2001 относит к числу необязательных возможностей.

При отправке писем shell-процедурами часто пользуются вставками (см. пример 3.8):

address=... . . . mailx $address << ! . . . текст письма . . . !

Листинг 3.8. Пример использования вставки для формирования письма. (html, txt)

Разумеется, интерактивные пользователи редко применяют утилиту mailx напрямую; для работы с почтой практически во всех ОС имеются средства с более дружественным интерфейсом.


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