mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      WRITE(1)                                               WRITE(1)

      НАЗВАНИЕ
              write - передача сообщений другому пользователю

      СИНТАКСИС
              write  пользователь [линия]

      ОПИСАНИЕ
              Команда write копирует строки  с  Вашего  терминала  на
              терминал другого пользователя. Команда прежде всего по-
              сылает адресату сообщение:

                   Message from Ваше_имя (tty??) [дата]...

              Как только связь будет успешно установлена, два  звонка
              известят Вас о том, что вводимая Вами информация  будет
              пересылаться.

              В этот момент адресату следует послать Вам ответное со-
              общение. Сеанс связи будет продолжаться до тех пор, по-
              ка с Вашего терминала не будет считан символ конца фай-
              ла, не будет послано прерывание или адресат не выполнит
              команду  mesg -n, после чего команда write передаст со-
              общение EOT (конец передачи) на другой терминал  и  за-
              вершит свое выполнение.

              Если Вы хотите передавать сообщения пользователю, кото-
              рый вошел в систему более одного раза,  то  указать,  с
              какой именно линией или терминалом  следует  установить
              связь, можно  посредством  аргумента  линия  (например,
              tty10); иначе адрес будет определен по первому упомина-
              нию о пользователе в файле /etc/utmp, а Вам будет выда-
              но сообщение:

                   пользователь is logged on more than one place.
                   You are connected to терминал
                   Other locations are:
                   терминал

              Пользователь может разрешить или запретить передачу со-
              общений  на  свой  терминал, используя команду mesg(1).
              Передача сообщений в режиме по умолчанию разрешена. Не-
              которые команды, в частности pr(1), блокируют прием со-
              общений с тем, чтобы воспрепятствовать смешиванию сооб-
              щений с выводимой ими информацией; однако, если пользо-
              ватель обладает правами суперпользователя, то он  может
              осуществлять  передачу принудительно, несмотря на уста-
              новленный адресатом запрет приема сообщений  на  терми-
              нал.

              Если строка начинается с символа !,  то  команда  write
              вызывает shell для исполнения  остальной  части  строки
              как команды.

              При использовании команды write рекомендуется придержи-
              ваться следующего протокола: если Вы только что  выдали
              команду write, то дождитесь ответа адресата, прежде чем
              что-либо ему передавать. Каждый должен заканчивать  со-
              общение каким-нибудь четко различимым  признаком  конца
              [например, (o) вместо "over" - конец сообщения],  чтобы
              партнер знал, когда отвечать. В качестве  признака  за-
              вершения сеанса  связи  рекомендуется  передавать  (oo)
              (вместо "over and out" - конец сообщения и сеанса).

      ФАЙЛЫ
              /etc/utmp       Для идентификации пользователя.
              /bin/sh         для отработки "!".

      СМ. ТАКЖЕ
              mail(1), mesg(1), pr(1), sh(1), who(1).

      ДИАГНОСТИКА
              Пользователь not logged in
                   Пользователь, которому Вы пытаетесь передать сооб-
                   щение, не работает в системе.

              Permission denied
                   Пользователь, которому Вы пытаетесь передать сооб-
                   щение, не дает на это разрешения.

              Warning: cannot respond, set mesg -y
                   Ваш  терминал находится в режиме mesg -n и адресат
                   не может вам ответить.

              Can no longer write to user
                   Адресат отменил разрешение (посредством  mesg  -n)
                   после того, как Вы начали передачу сообщения.



WRITE(2)                                               WRITE(2)

НАЗВАНИЕ 
        write - запись в файл

СИНТАКСИС 
        int write (fildes, buf, nbyte)
        int fildes;
        char *buf;
        unsigned nbyte;

ОПИСАНИЕ 
        Аргумент fildes - это дескриптор файла, полученный пос-
        ле  выполнения  системных  вызовов  creat(2),  open(2),
        dup(2), fcntl(2) или pipe(2).

        Системный вызов write пытается записать nbyte  байт  из
        буфера,  на который указывает аргумент buf, в файл, ас-
        социированный с дескриптором fildes.

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

        Для устройств без возможности  позиционирования  запись
        всегда выполняется с текущей позиции. Значение указате-
        ля  текущей позиции файла для такого устройства неопре-
        делено.

        Если  установлен  флаг статуса файла O_APPEND, то перед
        каждой записью указатель текущей позиции позиционирует-
        ся на конец файла.

        Для обычных файлов, если установлен флаг статуса  файла
        O_SYNC,  системный  вызов write ожидает физического об-
        новления как данных файла, так и его статуса. Эта опция
        предназначена для  специальных  приложений,  в  которых
        требуется дополнительная надежность даже за счет потери
        производительности. Для блочных специальных файлов, ес-
        ли  установлен  флаг O_SYNC, выполнение вызова write не
        завершится до тех пор, пока данные не  будут  физически
        обновлены.

        Запись в обычный файл блокируется, если установлен флаг
        учета  блокировки [см. chmod(2)] и тот сегмент файла, в
        который производится попытка записи, заблокирован  дру-
        гим  процессом.  В этом случае, если не установлен флаг
        O_NDELAY, записывающий процесс откладывается до  снятия
        блокировки сегмента.

        Для псевдоустройств [см. intro(2)] на выполнение опера-
        ции write влияют минимальное и  максимальное  возможные
        значения  аргумента nbyte ("размер пакета"), допустимые
        для данного потока. Эти значения  содержатся  в  модуле
        потока,  ближайшем  к  истоку. Если модуль не помещен в
        поток пользователем [см. опцию I_PUSH  в  streamio(7)],
        то  эти значения не могут быть установлены или опрошены
        на пользовательском  уровне.  Если  значение  аргумента
        nbyte  лежит  в  интервале изменений размера пакета, то
        записывается nbyte байт,  если  же  значение  аргумента
        nbyte  не  лежит  в этом интервале и минимальный размер
        пакета равен 0, то вызов write перед посылкой данных  в
        поток  разбивает буфер на сегменты максимально допусти-
        мой длины пакета (размер последнего сегмента может быть
        меньше максимального). Если значение аргумента nbyte не
        лежит в интервале изменений размера пакета и  минималь-
        ный  размер не равен 0, то write завершается неудачей с
        кодом ошибки ERANGE. Запись буфера нулевой длины  (зна-
        чение аргумента nbyte равно 0) приводит к посылке нуле-
        вого количества байт и возврату нулевого значения.

        Для псевдоустройств, если флаг O_NDELAY не установлен и
        поток не может принять данные (очередь записи  полна  в
        силу  внутренних причин), записывающий процесс отклады-
        вается до тех пор, пока поток не будет готов  к  приему
        данных.  Установленный флаг O_NDELAY предотвращает отк-
        ладывание, и в описанном случае вызов write завершается
        неудачей. Если флаг O_NDELAY  установлен  и  в  момент,
        когда  случилось  событие,  в результате которого поток
        перестал принимать данные, часть буфера  записана,  вы-
        полнение системного вызова write завершается и выдается
        количество записанных байт.

        Системный  вызов write завершается неудачей и указатель
        текущей позиции файла остается без изменений, если  вы-
        полнено хотя бы одно из следующих условий:

        [EAGAIN]    Установлены  флаги учета блокировки файла и
                    O_NDELAY, и требуемый сегмент файла  забло-
                    кирован.

        [EAGAIN]    Общее  количество системной памяти, предос-
                    тавленной для бесструктурного ввода/вывода,
                    временно оказалось недостаточным.

        [EAGAIN]    При  установленном  флаге  O_NDELAY попытка
                    записи в поток, который  не  может  принять
                    данные.

        [EBADF]     Аргумент  fildes  не  является   корректным
                    дескриптором файла, открытого для записи.

        [EDEADLK]   Попытка ожидания записи приводит к тупику.

        [EFAULT]    Аргумент buf указывает за пределы  отведен-
                    ного процессу адресного пространства.

        [EFBIG]     Превышение  допустимого размера файлов [см.
                    ulimit(2)].

        [EINTR]     Во время выполнения системного  вызова  пе-
                    рехвачен сигнал.

        [EINVAL]    Попытка записи в поток, который мультиплек-
                    сируется.

        [ENOLCK]    Нет свободного места  в  системной  таблице
                    блокировок.

        [ENOLINK]   Fildes является дескриптором файла на  уда-
                    ленном компьютере, связи с которым в данный
                    момент нет.

        [ENOSPC]    При попытке  записи в обычный файл нет сво-
                    бодного места на устройстве.

        [ENXIO]     Зависание при записи в поток stream.

        [EPIPE или сигнал SIGPIPE] 
                    Попытка записи в канал, который  не  открыт
                    каким-либо процессом на чтение.

        [ERANGE]    Попытка  записи в поток при значении nbyte,
                    выходящем за  пределы  допустимых  размеров
                    пакета, при ненулевом минимально допустимом
                    размере пакета.

        При  попытке записать большее количество байт, чем поз-
        воляет максимальный размер файла  [см.  ulimit(2)]  или
        наличие  свободного пространства на устройстве, записы-
        вается столько байт, сколько возможно. Например,  пусть
        в  файле  осталось  20 байт до достижения максимального
        размера. Тогда попытка записи в этот файл 512 байт при-
        водит к тому, что реально пишется 20 байт  и  системный
        вызов write возвращает значение 20. Последующая попытка
        записи ненулевого количества байт приводит к ошибке (за
        исключением случаев, описанных ниже).

        При  установленном флаге O_NDELAY запись в полный канал
        приводит к возврату значения 0. Если флаг  O_NDELAY  не
        установлен,  запись в полный канал задерживается до тех
        пор, пока не освободится пространство для записи.

        Запись в файл-псевдоустройство может завершиться неуда-
        чей, если в истоке потока получено сообщение об ошибке.
        Тогда переменной errno присваивается значение, содержа-
        щееся в этом сообщении.

СМ. ТАКЖЕ 
        creat(2),   dup(2),   fcntl(2),   intro(2),   lseek(2),
        open(2), pipe(2), ulimit(2).

ДИАГНОСТИКА 
        При успешном завершении результат равен неотрицательно-
        му целому числу - количеству реально записанных байт; в
        случае ошибки возвращается -1, а переменной errno прис-
        ваивается код ошибки.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк