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

Златоуст.Ru

 

 

DIAL(3C)                                               DIAL(3C)

НАЗВАНИЕ 
        dial - установление связи через терминальную линию

СИНТАКСИС 
        #include 
        
        int dial (call)
        CALL *call;
        
        void undial (fd)
        int fd;

ОПИСАНИЕ 
        Функция dial возвращает дескриптор файла для терминаль-
        ной линии, открытой на ввод/вывод.  Аргументом  функции
        dial является указатель на структуру типа CALL (тип оп-
        ределен во включаемом файле ).

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

        Тип структуры CALL  определяется  во  включаемом  файле
         следующим образом:

        typedef struct {
          struct termio *attr; /* Указатель  на структуру атри-
                                  бутов termio */
          int baud;            /* Скорость передачи */
          int speed;           /* Модем 212A: 300 или 1200 */
          char *line;          /* Имя устройства для терминаль-
                                  ной линии */
          char *telno;         /* Указатель на цепочку -  номер
                                  телефона */
          int modem;           /* Управление модемом для прямо-
                                  го соединения */
          int *device;         /* Сюда  будет записано имя уст-
                                  ройства, через которое  уста-
                                  новлено соединение */
          int dev_len;         /* Длина имени устройства */
        } CALL;

        Элемент speed предназначен только для использования при
        установлении соединения по  телефонной  линии;  в  этом
        случае  его  значение должно равняться 300 или 1200 для
        модемов 113A или 212A. Отметим, что модем 113A, а также
        модем 212A, установленный в низкоскоростной режим,  мо-
        гут  передавать на любой скорости от 0 до 300 бит в се-
        кунду. Однако модем 212A,  установленный  в  высокоско-
        ростной  режим  может  передавать и принимать только на
        скорости 1200 бит в секунду.

        Элемент  baud задает желаемую скорость передачи. Напри-
        мер, можно установить baud равным 110, а  speed  равным
        300. Однако если компонент speed равен 1200, baud также
        должен равняться 1200.

        Если нужная терминальная линия является прямым соедине-
        нием,  то указатель на имя устройства должен быть поме-
        щен в элемент line. Допустимые значения для таких  тер-
        минальных  устройств  содержатся  в  файле L-devices. В
        этом случае не требуется заполнять  элемент  baud,  его
        значение определяется из файла L-devices.

        Элемент telno является указателем на цепочку  символов,
        представляющих  телефонный  номер,  по  которому должно
        произойти соединение.  Терминирующий  символ  не  нужно
        включать  в цепочку, передаваемую dial, поскольку функ-
        ция добавит его сама.

        Элемент modem специфицирует управление модемом в случае
        прямого соединения. Если требуется управление  модемом,
        этот элемент должен быть ненулевым.

        Элемент  attr  является  указателем  на  структуру типа
        termio, описанную во включаемом файле .  Эле-
        мент attr может быть равен NULL, но если это не так, то
        все  атрибуты,  заданные компонентами структуры termio,
        будут установлены для терминальной линии перед попыткой
        выполнить соединение, что существенно для таких атрибу-
        тов, как четность и скорость передачи.

        Элемент device используется для хранения имени  устрой-
        ства, через которое было установлено соединение.

        Элемент  devlen  содержит длину имени устройства, запи-
        санного в массив device.

ФАЙЛЫ 
        /usr/lib/uucp/L-devices
        /usr/spool/uucp/LCK..устройство

СМ. ТАКЖЕ 
        uucp(1C) в Справочнике пользователя.
        alarm(2), read(2), write(2).
        termio(7) в Справочнике администратора.

ДИАГНОСТИКА 
        В случае неудачного завершения возвращается отрицатель-
        ное значение, объясняющее  причину  неудачи.  Мнемоники
        для  этих  отрицательных кодов завершения определены во
        включаемом файле :

        INTRPT (-1)   /* Случилось прерывание */

        D_HUNG (-2)   /*  Повешена  трубка  (чтобы прервать за-
                      пись) */

        NO_ANS (-3)   /* В течение 10 секунд нет ответа */

        ILL_BD (-4)   /* Некорректная скорость обмена */

        A_PROB (-5)   /* Ошибка при наборе номера */

        L_PROB (-6)   /* Ошибка в линии связи */

        NO_Ldv (-7)   /* Не открывается файл L-devices */

        DV_NT_A (-8)  /* Требуемое устройство недоступно */

        DV_NT_K (-9)  /* Требуемое устройство неизвестно */

        NO_BD_A (-10) /* Нет доступных устройств для работы  на
                      указанной скорости обмена */

        NO_BD_K (-11) /*  Нет известных устройств для работы на
                      указанной скорости обмена */

ПРЕДОСТЕРЕЖЕНИЯ 
        Функция dial(3C) несовместима со стандартными  сетевыми
        средствами (см. подраздел 1C) версии 5 ОС UNIX.

        Включение файла  автоматически приводит к вклю-
        чению файла .

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

СЮРПРИЗЫ 
        Функция dial выдает системный вызов  alarm(2)  на  3600
        секунд и затем перехватывает сигнал SIGALRM, "массируя"
        файл-семафор  LCK..устройство  и  поддерживая тем самым
        занятость линии. Без подобной меры uucp(1C) может  уда-
        лить  файл LCK..устройство во время своих сеансов чист-
        ки, повторяющихся каждые 90 минут. Если сигнал  SIGALRM
        придет  во время выполнения пользователем системных вы-
        зовов read(2) или write(2),  они  закончатся  неудачей.
        Если  программа  пользователя  должна выполняться более
        часа, в случае неудачи системных вызовов  read  следует
        проверять  значение  переменной  errno  (errno==EINTR),
        после чего read должен быть выдан повторно.



 

 

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

Мое резюме

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

Ресурсы сети

Фотоальбом

 

 

 

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