.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 1993 Michael Haardt (michael@moria.de) .\" Fri Apr 2 11:32:09 MET DST 1993 .\" Copyright (c) 2006-2015, Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" Modified 1993-07-24 by Rik Faith .\" Modified 1995-02-25 by Jim Van Zandt .\" Modified 1995-09-02 by Jim Van Zandt .\" moved to man3, aeb, 950919 .\" Modified 2001-09-22 by Michael Kerrisk .\" Modified 2001-12-17, aeb .\" Modified 2004-10-31, aeb .\" 2006-12-28, mtk: .\" Added .SS headers to give some structure to this page; and a .\" small amount of reordering. .\" Added a section on canonical and noncanonical mode. .\" Enhanced the discussion of "raw" mode for cfmakeraw(). .\" Document CMSPAR. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH termios 3 "5 февраля 2023 г." "Linux man\-pages 6.03" .SH ИМЯ termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, cfsetspeed \- возвращает и задаёт атрибуты терминала, управляет линией, возвращает и задаёт скорость передачи .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP \fB#include \fP .PP \fBint tcgetattr(int \fP\fIfd\fP\fB, struct termios *\fP\fItermios_p\fP\fB);\fP \fBint tcsetattr(int \fP\fIfd\fP\fB, int \fP\fIoptional_actions\fP\fB,\fP \fB const struct termios *\fP\fItermios_p\fP\fB);\fP .PP \fBint tcsendbreak(int \fP\fIfd\fP\fB, int \fP\fIduration\fP\fB);\fP \fBint tcdrain(int \fP\fIfd\fP\fB);\fP \fBint tcflush(int \fP\fIfd\fP\fB, int \fP\fIqueue_selector\fP\fB);\fP \fBint tcflow(int \fP\fIfd\fP\fB, int \fP\fIaction\fP\fB);\fP .PP \fBvoid cfmakeraw(struct termios *\fP\fItermios_p\fP\fB);\fP .PP \fBspeed_t cfgetispeed(const struct termios *\fP\fItermios_p\fP\fB);\fP \fBspeed_t cfgetospeed(const struct termios *\fP\fItermios_p\fP\fB);\fP .PP \fBint cfsetispeed(struct termios *\fP\fItermios_p\fP\fB, speed_t \fP\fIspeed\fP\fB);\fP \fBint cfsetospeed(struct termios *\fP\fItermios_p\fP\fB, speed_t \fP\fIspeed\fP\fB);\fP \fBint cfsetspeed(struct termios *\fP\fItermios_p\fP\fB, speed_t \fP\fIspeed\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBcfsetspeed\fP(), \fBcfmakeraw\fP(): .nf Начиная с glibc 2.19: _DEFAULT_SOURCE В версии glibc 2.19 и более ранних: _BSD_SOURCE .fi .SH ОПИСАНИЕ Функции termios описывают общий интерфейс терминала, который предоставляет управление асинхронными портами связи. .SS "Структура termios" Множество описанных здесь функций имеют аргумент \fItermios_p\fP, который является указателем на структуру \fItermios\fP. В этой структуре есть, по крайней мере, следующие поля: .PP .in +4n .EX tcflag_t c_iflag; /* режимы ввода */ tcflag_t c_oflag; /* режимы вывода */ tcflag_t c_cflag; /* режимы управления */ tcflag_t c_lflag; /* локальные режимы */ cc_t c_cc[NCCS]; /* специальные символы */ .EE .in .PP Значения этих полей описаны далее. Для первых четырёх полей битовых масок определения некоторых флагов доступны только, если определён специальный макрос тестирования свойств (смотрите \fBfeature_test_macros\fP(7)), как указано в квадратных скобках («[]»). .PP В описаниях ниже приписка «нет в POSIX» означает, что значение не описано в POSIX.1\-2001, а «XSI» — что значение описано в POSIX.1\-2001 как часть расширения XSI. .PP Константы флага \fIc_iflag\fP: .TP \fBIGNBRK\fP Игнорировать состояние BREAK в вводе. .TP \fBBRKINT\fP If \fBIGNBRK\fP is set, a BREAK is ignored. If it is not set but \fBBRKINT\fP is set, then a BREAK causes the input and output queues to be flushed, and if the terminal is the controlling terminal of a foreground process group, it will cause a \fBSIGINT\fP to be sent to this foreground process group. When neither \fBIGNBRK\fP nor \fBBRKINT\fP are set, a BREAK reads as a null byte (\[aq]\e0\[aq]), except when \fBPARMRK\fP is set, in which case it reads as the sequence \e377 \e0 \e0. .TP \fBIGNPAR\fP Игнорировать ошибки кадра и чётности. .TP \fBPARMRK\fP Если этот бит установлен, то входящие байты с ошибками чётности или кадра помечаются при передаче в программу. Этот бит значим, только когда установлен бит \fBINPCK\fP и не установлен бит \fBIGNPAR\fP. Байты с ошибками помечаются двумя предваряющими их байтами \e377 и \e0. То есть программа, на самом деле, читает три байта при получении одного байта с ошибками с терминала. Если корректный байт имеет значение \e377 и бит \fBISTRIP\fP (смотрите далее) не установлен, то программа может ошибочно посчитать его как помечающий ошибки чётности. Поэтому в этом случае корректный байт \e377 передаётся программе как два байта, \e377 \e377. .IP Если \fBIGNPAR\fP или \fBPARMRK\fP не указаны, то символ с ошибкой чётности или кадра считывается как \e0. .TP \fBINPCK\fP Включить проверку чётности ввода. .TP \fBISTRIP\fP Удалять восьмой бит. .TP \fBINLCR\fP Преобразовывать NL в CR в вводе. .TP \fBIGNCR\fP Игнорировать возврат каретки в вводе. .TP \fBICRNL\fP Преобразовывать возврат каретки в символ новой строки в вводе (если не указан \fBIGNCR\fP). .TP \fBIUCLC\fP (нет в POSIX) Переводить заглавные буквы в прописные в вводе. .TP \fBIXON\fP Включить управление потоком XON/XOFF в выводе. .TP \fBIXANY\fP (XSI) Набор любого символа запускает остановленный вывод (по умолчанию только символ START заново запускает вывод). .TP \fBIXOFF\fP Включить управление потоком XON/XOFF в вводе. .TP \fBIMAXBEL\fP (нет в POSIX) Выдавать звуковой сигнал, когда очередь ввода переполняется. В Linux не реализован этот бит и его действие выполняется всегда. .TP \fBIUTF8\fP (начиная с Linux 2.6.4) (нет в POSIX) Ввод в UTF8; это позволяет символу стирания (character\-erase) правильно работать в режиме предварительной обработки (cooked mode). .PP Константы флага \fIc_oflag\fP: .TP \fBOPOST\fP Включить обработку вывода, определяемую реализацией. .TP \fBOLCUC\fP (нет в POSIX) Переводить прописные буквы в заглавные в выводе. .TP \fBONLCR\fP (XSI) Преобразовывать NL в CR\-NL в выводе. .TP \fBOCRNL\fP Преобразовывать CR в NL в выводе. .TP \fBONOCR\fP Не выводить CR в столбец 0. .TP \fBONLRET\fP The NL character is assumed to do the carriage\-return function; the kernel's idea of the current column is set to 0 after both NL and CR. .TP \fBOFILL\fP Посылать символы заполнения для задержки, а не использовать временную задержку. .TP \fBOFDEL\fP Fill character is ASCII DEL (0177). If unset, fill character is ASCII NUL (\[aq]\e0\[aq]). (Not implemented on Linux.) .TP \fBNLDLY\fP Маска задержки новой строки. Значениями могут быть \fBNL0\fP и \fBNL1\fP [требуется \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP или \fB_XOPEN_SOURCE\fP]. .TP \fBCRDLY\fP Маска задержки перевода каретки. Значениями могут быть \fBCR0\fP, \fBCR1\fP, \fBCR2\fP или \fBCR3\fP [требуется \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP или \fB_XOPEN_SOURCE\fP]. .TP \fBTABDLY\fP Маска задержки горизонтальной табуляции. Значениями могут быть \fBTAB0\fP, \fBTAB1\fP, \fBTAB2\fP, \fBTAB3\fP (или \fBXTABS\fP, но смотрите раздел \fBBUGS\fP). Значение TAB3, то есть, XTABS, раскрывает табуляцию в пробелы (один символ табуляции — восемь столбцов) [требуется \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP или \fB_XOPEN_SOURCE\fP]. .TP \fBBSDLY\fP Маска задержки символа забоя. Значениями могут быть \fBBS0\fP или \fBBS1\fP (никогда не была реализована) [требуется \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP или \fB_XOPEN_SOURCE\fP]. .TP \fBVTDLY\fP Маска задержки вертикальной табуляции. Значениями могут быть \fBVT0\fP или \fBVT1\fP. .TP \fBFFDLY\fP Маска задержки прокрутки страницы. Значениями могут быть \fBFF0\fP или \fBFF1\fP [требуется \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP или \fB_XOPEN_SOURCE\fP]. .PP Константы флага \fIc_cflag\fP: .TP \fBCBAUD\fP (нет в POSIX) Маска скорости в бодах (4+1 бита) [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .TP \fBCBAUDEX\fP (нет в POSIX) Дополнительная маска скорости в бодах (1 бит), включена в \fBCBAUD\fP [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .IP В стандарте POSIX указано, что скорость в бодах хранится в структуре \fItermios\fP без указания её точного местонахождения, и для работы к ней используются \fBcfgetispeed\fP() и \fBcgfsetispeed\fP(). В некоторых системах используются биты, выбираемые \fBCBAUD\fP в \fIc_cflag\fP, в других используются отдельные поля, например \fIsg_ispeed\fP и \fIsg_ospeed\fP. .TP \fBCSIZE\fP Маска размера символа. Значениями могут быть \fBCS5\fP, \fBCS6\fP, \fBCS7\fP или \fBCS8\fP. .TP \fBCSTOPB\fP Использовать два стоповых бита вместо одного. .TP \fBCREAD\fP Включить приёмник. .TP \fBPARENB\fP Запустить генерацию чётности при выводе и проверку чётности на вводе. .TP \fBPARODD\fP Если указано, то при вводе и выводе используется отрицательная чётность, в противном случае используется положительная чётность. .TP \fBHUPCL\fP Выключить управляющие линии модема после того, как последний процесс прекратит использование устройства (повесит трубку). .TP \fBCLOCAL\fP Игнорировать управляющие линии модема. .TP \fBLOBLK\fP (нет в POSIX) Блокировать вывод из не текущего уровня оболочки (для использования в \fBshl\fP (shell layers), не реализовано в Linux). .TP \fBCIBAUD\fP (not in POSIX) Mask for input speeds. The values for the \fBCIBAUD\fP bits are the same as the values for the \fBCBAUD\fP bits, shifted left \fBIBSHIFT\fP bits. [requires \fB_BSD_SOURCE\fP or \fB_SVID_SOURCE\fP] (Not implemented in glibc, supported on Linux via \fBTCGET\fP* and \fBTCSET\fP* ioctls; see \fBioctl_tty\fP(2)) .TP \fBCMSPAR\fP (нет в POSIX) Использовать «липкую» (есть/нет) чётность (поддерживается в некоторых последовательных устройствах): если задан \fBPARODD\fP, то бит чётности всегда 1; если \fBPARODD\fP не задан, то бит чётности всегда 0 [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .TP \fBCRTSCTS\fP (нет в POSIX) Разрешить (аппаратное) управление потоком данных RTS/CTS [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .PP Константы флага \fIc_lflag\fP: .TP \fBISIG\fP При получении символов INTR, QUIT, SUSP или DSUSP генерировать соответствующий сигнал. .TP \fBICANON\fP Включить канонический режим (описан далее). .TP \fBXCASE\fP .\" glibc is probably now wrong to allow .\" Define .\" .B _XOPEN_SOURCE .\" to expose .\" .BR XCASE . (нет в POSIX; не поддерживается в Linux) Если также указан \fBICANON\fP, то терминал работает только с символами в верхнем регистре. Ввод преобразуется в символы нижнего регистра, кроме символов, предваряемых \e. При выводе предваряемые \e символы в верхнем регистре и символы в нижнем регистре преобразуются в символы верхнего регистра [requires \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP или \fB_XOPEN_SOURCE\fP]. .TP \fBECHO\fP Отображать вводимые символы. .TP \fBECHOE\fP Если также указан \fBICANON\fP, то символ ERASE стирает предыдущий введённый символ, а WERASE стирает предыдущее слово. .TP \fBECHOK\fP Если также указан \fBICANON\fP, то символ KILL стирает текущую строку. .TP \fBECHONL\fP Если также указан \fBICANON\fP, то символ NL отображается, даже если не указан ECHO. .TP \fBECHOCTL\fP (not in POSIX) If \fBECHO\fP is also set, terminal special characters other than TAB, NL, START, and STOP are echoed as \fB\[ha]X\fP, where X is the character with ASCII code 0x40 greater than the special character. For example, character 0x08 (BS) is echoed as \fB\[ha]H\fP. [requires \fB_BSD_SOURCE\fP or \fB_SVID_SOURCE\fP] .TP \fBECHOPRT\fP (нет в POSIX) Если также указаны \fBICANON\fP и \fBIECHO\fP, то символы печатаются по мере того, как они стираются [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .TP \fBECHOKE\fP (нет в POSIX) Если также указан \fBICANON\fP, то KILL выводится стиранием каждого символа в строке, как задано \fBECHOE\fP и \fBECHOPRT\fP [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .TP \fBDEFECHO\fP (нет в POSIX) Выводить (echo) только в момент чтения процессом (не реализовано в Linux). .TP \fBFLUSHO\fP (нет в POSIX; не поддерживается в Linux) Выводимые данные сбрасываются (flushed). Этот флаг переключается с помощью набираемого символа DISCARD [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .TP \fBNOFLSH\fP .\" Stevens lets SUSP only flush the input queue Отключить сброс (flushing) очередей ввода и вывода во время генерации сигналов из\-за символов INT, QUIT и SUSP. .TP \fBTOSTOP\fP Послать сигнал \fBSIGTTOU\fP группе процессов фонового процесса, который пытается писать на управляющий терминал. .TP \fBPENDIN\fP (нет в POSIX; не поддерживается в Linux) Все символы в очереди ввода повторно печатаются, когда читается последующий символ (это используется в \fBbash\fP(1) для перехвата набираемого) [требуется \fB_BSD_SOURCE\fP или \fB_SVID_SOURCE\fP]. .TP \fBIEXTEN\fP Включить обработку ввода, определяемую реализацией. Этот флаг, как и \fBICANON\fP, должен быть включён для обработки специальных символов EOL2, LNEXT, REPRINT, WERASE, а также для того, чтобы работал флаг \fBIUCLC\fP. .PP Массивом \fIc_cc\fP определяются специальные символы терминала. Символьные индексы (начальные значения) и их смысл: .TP \fBVDISCARD\fP (нет в POSIX; не поддерживается в Linux; 017, SI, Ctrl\-O) Переключатель: включить/выключить отбрасывание ожидающего вывода. Распознаётся, если указан \fBIEXTEN\fP и, в этом случае, не передаётся как ввод. .TP \fBVDSUSP\fP (нет в POSIX; не поддерживается в Linux; 031, EM, Ctrl\-Y) Символ отложенного приостанова (DSUSP). Посылает сигнал \fBSIGTSTP\fP при считывании символа программой пользователя. Распознаётся, если указаны \fBIEXTEN\fP и \fBISIG\fP, и система поддерживает управление заданиями. В этом случае не передаётся как ввод. .TP \fBVEOF\fP (004, EOT, Ctrl\-D) Символ конца файла (EOF). Этот символ заставляет переслать ждущий обработки буфер tty ожидающей программе пользователя без ожидания конца строки. Если это первый символ в строке, то \fBread\fP(2) вернёт программе 0, что означает конец файла. Распознаётся, если указан \fBICANON\fP, и, в этом случае, не передаётся как ввод. .TP \fBVEOL\fP (0, NUL) Дополнительный символ конца строки (EOL). Распознаётся, если указан \fBICANON\fP. .TP \fBVEOL2\fP (нет в POSIX; 0, NUL) Ещё один символ конца строки (EOL2). Распознаётся, если указан \fBICANON\fP. .TP \fBVERASE\fP (0177, DEL, rubout, или 010, BS, Ctrl\-H, а также #) Символ забоя (ERASE). Стирает предыдущий ещё не стёртый символ, но не стирает за EOF или началом строки. Распознаётся, если указан \fBICANON\fP, и, в этом случае, не передаётся как ввод. .TP \fBVINTR\fP (003, ETX, Ctrl\-C, а также 0177, DEL, rubout) Символ прерывания (INTR). Посылает сигнал \fBSIGINT\fP. Распознаётся, если указан \fBISIG\fP, и, в этом случае, не передаётся как ввод. .TP \fBVKILL\fP (025, NAK, Ctrl\-U, или Ctrl\-X, а также @) Символ уничтожения (KILL). Стирает ввод начиная с последнего EOF или начала строки. Распознаётся, если указан \fBICANON\fP, и, в этом случае, не передаётся как ввод. .TP \fBVLNEXT\fP (нет в POSIX; 026, SYN, Ctrl\-V) Следующий символ — литера (LNEXT). Экранирует следующий введённый символ, отменяя его возможное специальное значение. Распознаётся, если указан \fBIEXTEN\fP и, в этом случае, не передаётся как ввод. .TP \fBVMIN\fP Минимальное количество символов для неканонического чтения (MIN). .TP \fBVQUIT\fP (034, FS, Ctrl\-\e) Символ завершения (QUIT). Посылает сигнал \fBSIGQUIT\fP. Распознаётся, если указан \fBISIG\fP, и, в этом случае, не передаётся как ввод. .TP \fBVREPRINT\fP (нет в POSIX; 022, DC2, Ctrl\-R) Вывести заново непрочитанные символы (REPRINT). Распознаётся, если указан \fBICANON\fP и \fBIEXTEN\fP и, в этом случае, не передаётся как ввод. .TP \fBVSTART\fP (021, DC1, Ctrl\-Q) Символ запуска (START). Перезапускает вывод, остановленный символом останова. Распознаётся, если указан \fBIXON\fP и, в этом случае, не передаётся как ввод. .TP \fBVSTATUS\fP (нет в POSIX; не поддерживается в Linux; запрос состояния: 024, DC4, Ctrl\-T). Символ состояния (STATUS). Выводит информацию о состоянии на терминал, включая состояние активного (foreground) процесса и количество потраченного времени ЦП. Также посылает сигнал \fBSIGINFO\fP (не поддерживается в Linux) активной группе процессов. .TP \fBVSTOP\fP (023, DC3, Ctrl\-S) Символ останова (STOP). Приостанавливает вывод до появления символа запуска. Распознаётся, если указан \fBIXON\fP и, в этом случае, не передаётся как ввод. .TP \fBVSUSP\fP (032, SUB, Ctrl\-Z) Символ приостанова (SUSP). Посылает сигнал \fBSIGTSTP\fP. Распознаётся, если указан \fBISIG\fP и, в этом случае, не передаётся как ввод. .TP \fBVSWTCH\fP (нет в POSIX; не поддерживается в Linux; 0, NUL) Символ переключения (SWTCH). Используется в System V для переключения оболочек в \fIслоях оболочек\fP, предшественник механизма управления задачами в оболочке. .TP \fBVTIME\fP Время ожидания в децисекундах для неканонического чтения (TIME). .TP \fBVWERASE\fP (нет в POSIX; 027, ETB, Ctrl\-W) Стирание слова (WERASE). Распознаётся, если указан \fBICANON\fP и \fBIEXTEN\fP и, в этом случае, не передаётся как ввод. .PP Отдельные специальные терминальные символы могут быть выключены указанием значения \fB_POSIX_VDISABLE\fP в соответствующем элементе \fIc_cc\fP. .PP Все значения индексов этих символов различны, за исключением \fBVTIME\fP, \fBVMIN\fP, которые могут иметь те же значения, что и \fBVEOL\fP, \fBVEOF\fP, соответственно. В неканоническом режиме значения специальных символов используются как значения времени ожидания. Предназначение \fBVMIN\fP и \fBVTIME\fP смотрите в описании неканонического режима далее. .SS "Получение и изменение настроек терминала" Функция \fBtcgetattr\fP() возвращает параметры, связанные с объектом, на который ссылается \fIfd\fP, сохраняя их в структуре \fItermios\fP, на которую указывает \fItermios_p\fP. Эта функция может быть вызвана из фонового процесса; однако, атрибуты терминала могут в дальнейшем измениться активным процессом. .PP Функция \fBtcsetattr\fP() изменяет параметры терминала (если это позволяет используемое оборудование) из структуры \fItermios\fP, на которую указывает \fItermios_p\fP. В \fIoptional_actions\fP задаётся, когда параметры должны начать действовать: .TP \fBTCSANOW\fP Изменения начинают действовать немедленно. .TP \fBTCSADRAIN\fP Изменения начинают действовать после того, как переданы все данные для вывода, записанные в \fIfd\fP. Это действие должно использоваться при работе с параметрами, которые влияют на вывод. .TP \fBTCSAFLUSH\fP Изменения начинают действовать после того, как все данные, записанные в объект, на который указывает \fIfd\fP, были переданы, и все данные, которые были приняты, но не прочитаны, были отброшены. .SS "Канонический и неканонический режим" Флагом \fBICANON\fP в \fIc_lflag\fP определяется, в каком режиме работает терминал: в каноническом режиме (\fBICANON\fP установлен), и неканоническом (\fBICANON\fP не установлен). По умолчанию \fBICANON\fP установлен. .PP В каноническом режиме: .IP \[bu] 3 Вводимые данные становятся доступны построчно. Входная строка становится доступна после набора одного из разделителей строк (NL, EOL, EOL2 или EOF в начале строки). За исключением EOF, разделитель строк добавляется в буфер, возвращаемый \fBread\fP(2). .IP \[bu] Включено редактирование строки (ERASE, KILL; и, если указан флаг \fBIEXTEN\fP — WERASE, REPRINT, LNEXT). Вызов \fBread\fP(2) возвращает не более одной строки ввода; если \fBread\fP(2) запрашивает меньше байт, чем доступно в текущей вводимой строке, то читается только количество запрошенных байт, а оставшиеся символы будут доступны для следующего \fBread\fP(2). .IP \[bu] Максимальная длина строки \- 4096 символов (включая завершающий символ перевода строки); строки длиннее 4096 символов будут обрезаны. После 4095 символов обработка ввода (то есть обработка \fBISIG\fP и \fBECHO*\fP) продолжится, однако любые входящие данные после 4095 символов до (но не включая) любого завершающего символа новой строки будут отбрасываться. Благодаря этому терминал всегда сможет принять больше входящих данных до тех пор, пока не появится хотя бы один перевод строки. .PP В неканоническом режиме вводимые данные доступны сразу (без введённого пользователем символа разделителя строк), обработка ввода не выполняется и редактирование строки выключено. Буфер чтения принимает только 4095 символов; благодаря этому, в случае, если режим ввода переключится в канонический, резервируется необходимое место для символа новой строки. Настройками MIN (\fIc_cc[VMIN]\fP) и TIME (\fIc_cc[VTIME]\fP) задаются условия, при которых выполняется \fBread\fP(2); есть четыре варианта: .TP MIN == 0, TIME == 0 (чтение опросом (polling read)) Если данные доступны, то \fBread\fP(2) завершает выполнение сразу, возвращая меньшее или запрошенное количество байт. Если данных нет, то \fBread\fP(2) возвращает 0. .TP MIN > 0, TIME == 0 (блокирующее чтение) Вызов \fBread\fP(2) блокирует выполнение, пока не будет доступно MIN байт, и возвращает не более количества запрашиваемых байт. .TP MIN == 0, TIME > 0 (чтение с блокировкой по времени (read with timeout)) В TIME указывается время срабатывания таймера в десятых долях секунды. Таймер запускается при вызове \fBread\fP(2). Вызов \fBread\fP(2) завершается, когда не менее одного байта станет доступно, или когда сработает таймер. Если таймер сработал, а данных не появилось, то \fBread\fP(2) возвращает 0. Если на момент вызова \fBread\fP(2) данные уже были, то вызов действует так, как если бы данные были получены сразу после вызова. .TP MIN > 0, TIME > 0 (чтение с блокировкой по времени между байтами (read with interbyte timeout)) В TIME указывается время срабатывания таймера в десятых долях секунды. После того, как первый байт станет доступен, таймер перезапускается после каждого полученного байта. Вызов \fBread\fP(2) возвращает результат после удовлетворения любого из следующих условий: .RS .IP \[bu] 3 Было получено MIN байт. .IP \[bu] Истекло время межбайтового таймера. .IP \[bu] .\" e.g., Solaris Получено запрошенное \fBread\fP(2) количество байт (в POSIX нет этого условия завершения, и в некоторых реализациях \fBread\fP(2) не возвращает управление в этом случае). .RE .IP Так как таймер запускается только после приёма начального байта, будет прочитан, как минимум, один байт. Если на момент вызова \fBread\fP(2) данные уже были, то вызов действует так, как если бы данные были получены сразу после вызова. .PP .\" POSIX.1-2008 XBD 11.1.7 В POSIX не указано, имеет ли флаг состояния файла \fBO_NONBLOCK\fP приоритет над настройками MIN и TIME. Если \fBO_NONBLOCK\fP установлен, то \fBread\fP(2) в неканоническом режиме может вернуть управление сразу же, независимо от настройки MIN или TIME. Более того, если данных нет, то в POSIX разрешено \fBread\fP(2) в неканоническом режиме вернуть или 0, или \-1 с установкой \fIerrno\fP равной \fBEAGAIN\fP. .SS "Режим без обработки" Функция \fBcfmakeraw\fP() переводит терминал в нечто похожее на режим «raw» старого драйвера терминала Version 7: ввод доступен символ за символом, эхо отключено и все специальные обработки символов при вводе и выводе также отключены. Задаются следующие атрибуты терминала: .PP .in +4n .EX termios_p\->c_iflag &= \[ti](IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); termios_p\->c_oflag &= \[ti]OPOST; termios_p\->c_lflag &= \[ti](ECHO | ECHONL | ICANON | ISIG | IEXTEN); termios_p\->c_cflag &= \[ti](CSIZE | PARENB); termios_p\->c_cflag |= CS8; .EE .in .\" .SS "Управление линией" \fBtcsendbreak\fP() transmits a continuous stream of zero\-valued bits for a specific duration, if the terminal is using asynchronous serial data transmission. If \fIduration\fP is zero, it transmits zero\-valued bits for at least 0.25 seconds, and not more than 0.5 seconds. If \fIduration\fP is not zero, it sends zero\-valued bits for some implementation\-defined length of time. .PP Если терминал не использует асинхронную передачу данных, то \fBtcsendbreak\fP() заканчивает работу, не предпринимая каких\-либо действий. .PP Функция \fBtcdrain\fP() ждёт, пока все данные вывода, записанные в объект, на который ссылается \fIfd\fP, не будут переданы. .PP Функция \fBtcflush\fP() отбрасывает (discards) данные, записанные, но не переданные в объект, на который ссылается \fIfd\fP, или принятые, но не прочитанные (в зависимости от значения \fIqueue_selector\fP): .TP \fBTCIFLUSH\fP Отбросить принятые, но не прочитанные данные. .TP \fBTCOFLUSH\fP Отбросить записанные, но не переданные данные. .TP \fBTCIOFLUSH\fP Отбросить принятые, но не прочитанные данные и записанные, но не переданные данные. .PP Функция \fBtcflow\fP() задерживает передачу или приём данных объектом, на который ссылается \fIfd\fP (в зависимости от значения \fIaction\fP): .TP \fBTCOOFF\fP Задержать вывод. .TP \fBTCOON\fP Возобновить задержанный вывод. .TP \fBTCIOFF\fP Передать символ STOP, который останавливает передачу данных в систему с устройства терминала. .TP \fBTCION\fP Передать символ START, который начинает передачу данных в систему с устройства терминала. .PP По умолчанию при открытии файла терминала ни ввод, ни вывод не приостановлены. .SS "Скорость линии" Функции работы со скоростью передачи (в бодах) предназначены для получения и установки значений скоростей ввода и вывода в структуре \fItermios\fP. Новые значения не действуют, пока не будет вызвана \fBtcsetattr\fP(). .PP При установке скорости \fBB0\fP модему передаётся команда «повесить трубку». Фактическая скорость, соответствующая \fBB38400\fP, может быть изменена с помощью \fBsetserial\fP(8). .PP Скорости ввода и вывода хранятся в структуре \fItermios\fP. .PP Функция \fBcfgetospeed\fP() возвращает скорость вывода данных, хранящуюся в структуре \fItermios\fP, на которую указывает \fItermios_p\fP. .PP Функция \fBcfsetospeed\fP() устанавливает скорость вывода данных из поля \fIspeed\fP структуры \fItermios\fP, на которую указывает \fItermios_p\fP. Значение должно быть равно одной из следующих констант: .RS .TP \fBB0\fP .TQ \fBB50\fP .TQ \fBB75\fP .TQ \fBB110\fP .TQ \fBB134\fP .TQ \fBB150\fP .TQ \fBB200\fP .TQ \fBB300\fP .TQ \fBB600\fP .TQ \fBB1200\fP .TQ \fBB1800\fP .TQ \fBB2400\fP .TQ \fBB4800\fP .TQ \fBB9600\fP .TQ \fBB19200\fP .TQ \fBB38400\fP .TQ \fBB57600\fP .TQ \fBB115200\fP .TQ \fBB230400\fP .TQ \fBB460800\fP .TQ \fBB500000\fP .TQ \fBB576000\fP .TQ \fBB921600\fP .TQ \fBB1000000\fP .TQ \fBB1152000\fP .TQ \fBB1500000\fP .TQ \fBB2000000\fP .RE .PP These constants are additionally supported on the SPARC architecture: .RS .TP \fBB76800\fP .TQ \fBB153600\fP .TQ \fBB307200\fP .TQ \fBB614400\fP .RE .PP These constants are additionally supported on non\-SPARC architectures: .RS .TP \fBB2500000\fP .TQ \fBB3000000\fP .TQ \fBB3500000\fP .TQ \fBB4000000\fP .RE .PP Due to differences between architectures, portable applications should check if a particular \fBB\fP\fInnn\fP constant is defined prior to using it. .PP The zero baud rate, \fBB0\fP, is used to terminate the connection. If \fBB0\fP is specified, the modem control lines shall no longer be asserted. Normally, this will disconnect the line. \fBCBAUDEX\fP is a mask for the speeds beyond those defined in POSIX.1 (57600 and above). Thus, \fBB57600\fP & \fBCBAUDEX\fP is nonzero. .PP Setting the baud rate to a value other than those defined by \fBB\fP\fInnn\fP constants is possible via the \fBTCSETS2\fP ioctl; see \fBioctl_tty\fP(2). .PP Функция \fBcfgetispeed\fP() возвращает скорость ввода данных, хранящуюся в структуре \fItermios\fP. .PP \fBcfsetispeed\fP() sets the input baud rate stored in the \fItermios\fP structure to \fIspeed\fP, which must be specified as one of the \fBB\fP\fInnn\fP constants listed above for \fBcfsetospeed\fP(). If the input baud rate is set to the literal constant \fB0\fP (not the symbolic constant \fBB0\fP), the input baud rate will be equal to the output baud rate. .PP Функция \fBcfsetspeed\fP() является расширением 4.4BSD. Она имеет те же аргументы что и \fBcfsetispeed\fP(), и задаёт сразу скорость и ввода и вывода. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функция \fBcfgetispeed\fP() возвращает скорость ввода данных, хранящуюся в структуре \fItermios\fP. .PP Функция \fBcfgetospeed\fP() возвращает скорость вывода данных, хранящуюся в структуре \fItermios\fP. .PP Все остальные функции возвращают: .TP \fB0\fP при успешном выполнении. .TP \fB\-1\fP при ошибках и \fIerrno\fP присваивается код ошибки. .PP Заметим, что \fBtcsetattr\fP() завершается без ошибок, если \fIлюбое\fP запрошенное изменение было успешно выполнено. Поэтому, при одновременном изменении нескольких параметров, может понадобиться вызвать \fBtcgetattr\fP() для того, чтобы убедиться, что все изменения были выполнены. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .nh .ad l .nh .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ \fBtcgetattr\fP(), \fBtcsetattr\fP(), \fBtcdrain\fP(), \fBtcflush\fP(), \fBtcflow\fP(), \fBtcsendbreak\fP(), \fBcfmakeraw\fP(), \fBcfgetispeed\fP(), \fBcfgetospeed\fP(), \fBcfsetispeed\fP(), \fBcfsetospeed\fP(), \fBcfsetspeed\fP() T} Безвредность в нитях MT\-Safe .TE .hy .ad .sp 1 .\" FIXME: The markings are different from that in the glibc manual. .\" markings in glibc manual are more detailed: .\" .\" tcsendbreak: MT-Unsafe race:tcattr(filedes)/bsd .\" tcflow: MT-Unsafe race:tcattr(filedes)/bsd .\" .\" glibc manual says /bsd indicate the preceding marker only applies .\" when the underlying kernel is a BSD kernel. .\" So, it is safety in Linux kernel. .hy .SH СТАНДАРТЫ Функции \fBtcgetattr\fP(), \fBtcsetattr\fP(), \fBtcsendbreak\fP(), \fBtcdrain\fP(), \fBtcflush\fP(), \fBtcflow\fP(), \fBcfgetispeed\fP(), \fBcfgetospeed\fP(), \fBcfsetispeed\fP() и \fBcfsetospeed\fP() определены в POSIX.1\-2001. .PP Функций \fBcfmakeraw\fP() и \fBcfsetspeed\fP() нет в стандарте, но есть в BSD. .SH ЗАМЕЧАНИЯ UNIX\ V7 and several later systems have a list of baud rates where after the values \fBB0\fP through \fBB9600\fP one finds the two constants \fBEXTA\fP, \fBEXTB\fP ("External A" and "External B"). Many systems extend the list with much higher baud rates. .PP .\" libc4 until 4.7.5, glibc for sysv: EINVAL for duration > 0. .\" libc4.7.6, libc5, glibc for unix: duration in ms. .\" glibc for bsd: duration in us .\" glibc for sunos4: ignore duration Ненулевое значение \fIduration\fP с \fBtcsendbreak\fP() приводит к неизвестному результату. В SunOS задана пауза \fIduration\ *\ N\fP секунд, где N равно не менее 0.25, и не более 0.5. В Linux, AIX, DU, Tru64 делается пауза в \fIduration\fP миллисекунд. В FreeBSD и NetBSD и HP\-UX и MacOS значение \fIduration\fP игнорируется. В Solaris и UnixWare функция \fBtcsendbreak\fP() с ненулевым \fIduration\fP работает аналогично \fBtcdrain\fP(). .SH ДЕФЕКТЫ .\" kernel 77e5bff1640432f28794a00800955e646dcd7455 .\" glibc 573963e32ffac46d9891970ddebde2ac3212c5c0 On the Alpha architecture before Linux 4.16 (and glibc before glibc 2.28), the \fBXTABS\fP value was different from \fBTAB3\fP and it was ignored by the \fBN_TTY\fP line discipline code of the terminal driver as a result (because as it wasn't part of the \fBTABDLY\fP mask). .SH "СМ. ТАКЖЕ" \fBreset\fP(1), \fBsetterm\fP(1), \fBstty\fP(1), \fBtput\fP(1), \fBtset\fP(1), \fBtty\fP(1), \fBioctl_console\fP(2), \fBioctl_tty\fP(2), \fBcc_t\fP(3type), \fBspeed_t\fP(3type), \fBtcflag_t\fP(3type), \fBsetserial\fP(8) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .