Isatty определить тип потока

posix_isatty

(PHP 4, PHP 5, PHP 7)

posix_isatty — Определяет является ли файловый дескриптор интерактивным терминалом

Описание

Определяет является ли файловый дескриптор fd ссылкой на валидный терминал.

Список параметров

Файловый дескриптор, который ожидается в виде или ресурса resource или целого числа integer . Под integer подразумевается файловый дескриптор, который можно передать непосредственно в базовый системный вызов.

В большинстве случаев, вам нужно будет передавать файловый resource .

Возвращаемые значения

Возвращает TRUE если fd является открытым файловым дескриптором, связанным с терминалом и FALSE в остальных случаях.

Смотрите также

  • posix_ttyname() — Определяет имя терминального устройства

Поддельный тип выходного потока

По умолчанию определенные программы форматируют свои выходные данные в соответствии с типом потока, в который они записывают. Например, вывод ls и ls > file выглядит по-разному. Я хотел бы знать, как это достигается программой. Кроме того, есть ли способ, с помощью которого мы можем обмануть такие программы, как если бы выходной поток представлял собой терминал, где он фактически является файлом (особенно если у них нет опций, влияющих на форматирование вывода)?

2 ответа

Один из способов обмануть, вместо того, чтобы делать редирект, запустить script . Теперь все, что идет в ‘tty’ (включая то, что вы вводите в stdin и что отправляется на вывод) отправляется в файл с именем typcript.

Эти программы используют isatty(fileno(stdout)) чтобы проверить, пишут ли они в TTY (терминал) или что-то еще (например, канал).

Программирование: Разработка и отладка программ

AIX — это многопользовательская операционная система, причем с ней могут работать пользователи как локальных, так и удаленных компьютеров. На уровне соединений эта возможность обеспечивается подсистемой tty.

Взаимодействие между терминалами и программами происходит через интерфейс tty. Примеры устройств tty приведены ниже:

  • Модемы
  • Текстовые терминалы
  • Системная консоль
  • Принтер
  • Системная консоль
  • Xterm или aixterm в X-Windows

Подсистема tty отвечает за:

  • Управление передачей данных по асинхронной линии связи (скоростью передачи, размером символов и доступом к линии).
  • Интерпретацию данных, включая распознавание специальных символов и определение языка.
  • Управление заданиями и доступом к терминалам с помощью модели управляющего терминала

Управляющий терминал обслуживает операции ввода-вывода группы процессов. Особый файл tty обеспечивает интерфейс для управляющего терминала. В реальной работе пользовательские программы редко явно открывают файлы терминалов, такие как dev/tty5 . Эти файлы открываются командой getty или rlogind . После этого они применяются в качестве устройств стандартного ввода и вывода.

Для выполнения поставленных задач подсистема tty разбита на модули. Модуль отвечает за один из уровней передачи данных между компьютером и асинхронным устройством. Модули tty могут добавляться и удаляться динамически.

Драйверы tty, или аппаратные дисциплины, напрямую управляют аппаратным (для устройств tty) или псевдоаппаратным (для устройств pty) обеспечением. Драйверы занимаются обменом данными с адаптером, обеспечивая для вышестоящих модулей управление потоком и специальную семантику открытия порта.

Существуют следующие драйверы tty:

cxma Высокоуровневый терминал, подключенный к 128-портовому асинхронному контроллеру. Имя этого терминала — /dev/hft/ Y , где Y > = 0.
lft Низкоуровневый терминал. Имя этого терминала — /dev/lft Y , где Y >= 0.
lion 64-портовый асинхронный контроллер.
rs Встроенный 8- или 16-портовый асинхронный контроллер.

Дополнительная информация по этому вопросу приведена в разделе Драйверы tty.

Дисциплины линии предназначены для управления заданиями и интерпретации специальных символов. Они выполняют все необходимые преобразования входящих и исходящих потоков данных. Кроме того, дисциплины линии обрабатывают ошибки и отслеживают состояние драйвера tty.

Предусмотрены следующие дисциплины линии:

ldterm Устройства терминалов (см. Модуль дисциплины линии (ldterm))
sptr Принтер (команда splp )
slip Линия связи SLIP (команда slattach )

Модули, или дисциплины , преобразования предназначены для обработки символов ввода и вывода.

Предусмотрены следующие модули преобразования:

nls Поддержка национальных языков; этот модуль преобразует символы входящих и исходящих потоков в соответствии с таблицами, определенными для порта (см. описание команды setmaps )
lc_sjis и uc_sjis Первичные и вторичные модули преобразования многобайтовых символов из SJIS (Shifted Japanese Industrial Standard) в AJEC (Advanced Japanese EUC Code) для дисциплины линии ldterm .

Дополнительная информация по этому вопросу приведена в разделе Модули преобразования.

Подсистема tty основана на потоках. Это позволяет создать гибкую структуру, разбитую на модули, которая обладает следующими свойствами:

  • Простота настройки: пользователи могут настраивать подсистему tty, добавляя и удаляя отдельные модули.
  • Универсальность модулей: например, один модуль дисциплины линии может работать с разными устройствами tty.
  • Простота добавления новых функций.
  • Возможность работы с различными устройствами через один интерфейс.

Поток tty состоит из следующих модулей:

  • Начало потока, в котором обрабатываются пользовательские запросы. У всех потоков терминалов, независимо от дисциплины линии и драйвера, общее начало.

  • Необязательный первичный модуль преобразования (например, uc_sjis ), обрабатывающий входящие и исходящие данные перед дисциплиной линии.
  • Дисциплина линии.
  • Необязательный вторичный модуль преобразования (например, lc_sjis ), обрабатывающий входящие и исходящие данные после дисциплины преобразования.
  • Необязательный модуль преобразования символов ( nls ), обрабатывающий входящие и исходящие данные перед драйвером терминала.
  • Конец потока: драйвер терминала.

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

Для принтера модули поддержки национальных языков обычно отсутствуют, что существенно упрощает структуру потока.

Интерфейсы стандартных функций подсистемы tty описаны в файлах /usr/include/sys/ioctl.h и /usr/include/termios.h . Файл ioctl.h , применяемый всеми модулями, содержит структуру winsize и несколько команд ioctl. Файл termios.h содержит типы данных и функции, определенные в стандарте POSIX.

Для управления аппаратным обеспечением предназначены следующие функции:

cfgetispeed Возвращает скорость получения данных в бодах
cfgetospeed Возвращает скорость передачи данных в бодах
cfsetispeed Задает скорость получения данных в бодах
cfsetospeed Задает скорость передачи данных в бодах
tcsendbreak Передает сигнал прерывания по асинхронной последовательной линии

Для управления потоком предназначены следующие функции:

tcdrain Ожидает завершения вывода
tcflow Выполняет функции управления потоком
tcflush Очищает указанную очередь

Для получения информации и управления терминалом предназначены следующие функции:

isatty Определяет, является ли устройство терминалом
setcsmap Считывает файл преобразования кодовых наборов и связывает его с устройством стандартного ввода
tcgetattr Возвращает состояние терминала
tcsetattr Задает состояние терминала
ttylock , ttywait , ttyunlock или ttylocked Управляют функциями блокировки терминала
ttyname Возвращает имя терминала

Ядро сохраняет структуру winsize с информацией о размере текущего терминала или окна. Структура winsize содержит следующие поля:

ws_row Число строк (символов) окна или терминала
ws_col Число столбцов (символов) окна или терминала
ws_xpixel Горизонтальный размер окна или терминала в пикселах
ws_ypixel Вертикальный размер окна или терминала в пикселах

По принятому соглашению, значение 0 во всех полях структуры winsize означает, что она еще не была заполнена.

termdef Запрашивает характеристики терминала.
TIOCGWINSZ Возвращает размер окна. В качестве аргумента этой операции передается указатель на структуру winsize , в которую помещаются параметры текущего окна или терминала.
TIOCSWINSZ Задает размер окна. В качестве аргумента этой операции передается указатель на структуру winsize , в которую помещаются новые параметры окна или терминала. Если переданная информация отличается от текущей, группе процессов терминала отправляется сигнал SIGWINCH .

Для управления группой процессов предназначены следующие функции:

tcgetpgrp Возвращает идентификатор интерактивной группы процессов
tcsetpgrp Задает идентификатор интерактивной группы процессов

Следующие операции ioctl задают размер буферов ввода и вывода на терминал. В качестве аргумента этим операциям передается указатель на размер буфера.

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

Синхронизация подсистемы tty обеспечивается модулем STREAMS. Модули потоков tty поддерживают синхронизацию на уровне пар очередей. Такая синхронизация позволяет разделить обработку на два параллельных потока.

Особый файл lft описывает драйвер консоли.

Файл termios.h содержит структуры данных, применяемые с дисциплинами линий POSIX.

Файл termiox.h содержит интерфейс управления аппаратным потоком данных для асинхронных линий.

Особый файл tty — это синоним для управляющего терминала.

Особый файл pty описывает драйвер устройства псевдотерминала.

Тип поддельного выходного потока

По умолчанию определенные программы форматируют свой вывод в соответствии с типом потока, который они пишут. Например, вывод ls и ls > file выглядит по-разному. Я хотел бы знать, как это достигается программой. Кроме того, есть ли способ, с помощью которого мы можем обмануть такие программы, как если бы выходной поток был терминалом, где он фактически является файлом (особенно, когда у них нет каких-либо параметров, влияющих на форматирование вывода)?

Isatty(fileno(stdout)

Есть ли чисто плюсовая альтернатива isatty(fileno(stdout)) (проверка – не перенаправлен ли вывод в файл)?
Причём, Clang, к примеру, понимает только такой вариант: _isatty(_fileno(stdout)) .

Это же всё сишные функции, а плюсовое есть что-то такое?

09.04.2020, 20:28

Переадресация STDOUT/IN
Вот есть решение https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx.

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

Чтение stdout дочернего процесса
Задача: запустить консольную утилиту и отобразить процесс ее деятельности. Пример: pngout.exe.

Редирект stdout,stderr своего же консольного приложения
Возможно ли сделать редирект stdout,stderr своего же консольного приложения? Не порождая дочерних.

6.4. Терминалы: isatty()

6.4. Терминалы: isatty()

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

Однако иногда бывают моменты, когда программе действительно нужно знать, с какого рода файлом связан файловый дескриптор. Семейство вызовов stat() часто предоставляет достаточно сведений обычный файл, каталог, устройство и т.д. Хотя иногда даже этого недостаточно, и для интерактивных программ, в частности, вам может потребоваться знать, не представляет ли дескриптор файла tty .

tty (сокращение для Teletype, одного из ранних производителей компьютерных терминалов) является любым устройством, представляющим терминал, т.е. нечто, что человек мог бы использовать для взаимодействия с компьютером. Это может быть либо аппаратное устройство, такое, как клавиатура и монитор персонального компьютера, или старинный терминал видеодисплея, соединенный с компьютером через последовательный порт или модем, или программный псевдотерминал, такой, который используется в оконных системах и при сетевых регистрациях.

Различить можно с помощью isatty() .

int isacty(int desc);

Эта функция возвращает 1, если дескриптор файла desc представляет терминал, в противном случае 0. В соответствии с POSIX isatty() может установить errno для указания ошибки; поэтому до вызова isatty() следует установить errno в 0, а затем проверить ее значение, если был возвращен 0. (Справочная страница GNU/Linux isatty(3) не упоминает об использовании errno .) Стандарт POSIX также указывает, что просто возврат isatty() 1 не означает, что на другом конце дескриптора файла находится человек!

Одним местом, где используется isatty() , является современная версия ls , в которой имена файлов по умолчанию печатаются в столбцы, если терминалом является стандартный вывод, а если нет, они печатаются по одной на строчку.

Isatty – идентификация типов устройств

Функция

Производит проверку на тип устройства.

Синтаксис

Прототип

Описание

Функция isatty определяет, какой из перечисленных ниже типов устройств идентифицирует параметр handle:

— Терминал.
— Консоль.
— Принтер.
— Последовательный порт.

Возвращаемое значение

Если устройство является символьным, функция isatty возвращает ненулевое значение, если данное устройство не относится к такому типу, функция isatty возвращает 0.

Переносимость

Функция isatty уникальна для DOS.

Пример

int main(void)
<
int handle;
handle = fileno(stdout);
if(isatty(c))
printf(«Дескриптор %d — относится к устройству\n»,handle);
else
printf(«Дескриптор %d — не относится к устройству\n»,handle);
return 0;
>

Isatty(fileno(stdout)

Есть ли чисто плюсовая альтернатива isatty(fileno(stdout)) (проверка – не перенаправлен ли вывод в файл)?
Причём, Clang, к примеру, понимает только такой вариант: _isatty(_fileno(stdout)) .

Это же всё сишные функции, а плюсовое есть что-то такое?

09.04.2020, 20:28

Переадресация STDOUT/IN
Вот есть решение https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx.

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

Чтение stdout дочернего процесса
Задача: запустить консольную утилиту и отобразить процесс ее деятельности. Пример: pngout.exe.

Редирект stdout,stderr своего же консольного приложения
Возможно ли сделать редирект stdout,stderr своего же консольного приложения? Не порождая дочерних.

Способ тестирования потоков данных

В методе базового пути тесты строятся на основе анализа управляющей структуры программы. В данном способе анализу подвергается информационная структура программы.

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

Пусть потоковый граф программы имеет вид, представленный на рис. 2.16, причем в нём сплошные дуги — это связи по управлению между оператором в программе, а пунктирные дуги отмечают информационные связи (связи по потокам данных).

Рис. 2.16. Граф программы с управляющими и информационными связями

Обозначенные здесь информационные связи соответствуют следующим допущениям:

· переменные а и в определяются в узле 1;

· переменная а используется в узле 4, переменная в — в узлах 3 и 6;

· переменная с определяется в узле 4 и используется в узле 6.

В общем случае для каждой i- той вершины графа можно записать :

Под определением данных понимают действия, изменяющие элемент данных. Технический признак определения элемента данных х — данное стоит в левой части оператора присваивания:

Использование данных — это применение элемента в выражении, где происходит обращение к элементу данных, но не изменение элемента. Технический признак пользования элемента х— имя элемента стоит в правой части оператора присваивания.

Назовём DU-цепочкой (цепочкой определения-использования) конструкцию [x, i, j], где i, j — имена вершин; х определена в i-й вершине (x ÎDEF (i)) и используется в j-й вершине (хÎ USE(j)).

В нашем примере существуют следующие DU цепочки:

[a, 1, 4], [b,1, 3], [b, 1, 6], [c, 4, 6].

Способ DU-тестирования требует охвата всех DU-цепочек программы. Таким образом, разработка тестов здесь проводится на основе анализа жизни всех данных программы.

Очевидно, что для подготовки тестов требуется выделение маршрутов — путей выполнения программы на управляющем графе. Критерий для выбора пути — покрытие максимального количества DU-цепочек.

Шаги способа DU-тестирования:

1) Построение управляющего графа программы;

2) Построение информационного графа программы;

3) Формирование полного набора DU-цепочек;

4) Формирование полного набора отрезков путей в управляющем графе (отображением набора DU-цепочек информационного графа, рис.2.17);

Рис. 2.17. Отображение DU- цепочки на отрезок графа управления.

5) Построение маршрутов — полных путей на управляющем графе, покрывающих набор отрезков путей управляющего графа;

6) Подготовка тестовых вариантов.

простота необходимого анализа операционно-управляющей структуры программы;

Недостаток DU-тестирования: трудности в выборе минимального количества максимально эффективных тестов.

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

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: На стипендию можно купить что-нибудь, но не больше. 8987 — | 7235 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Определяет является ли файловый дескриптор интерактивным терминалом

(PHP 4, PHP 5, PHP 7)

posix_isatty — Определяет является ли файловый дескриптор интерактивным терминалом

Описание

Определяет является ли файловый дескриптор fd ссылкой на валидный терминал.

Список параметров

Файловый дескриптор, который ожидается в виде или ресурса resource или целого числа integer . Под integer подразумевается файловый дескриптор, который можно передать непосредственно в базовый системный вызов.

В большинстве случаев, вам нужно будет передавать файловый resource .

Возвращаемые значения

Возвращает TRUE если fd является открытым файловым дескриптором, связанным с терминалом и FALSE в остальных случаях.

Смотрите также

  • posix_ttyname() — Определяет имя терминального устройства
Илон Маск рекомендует:  Как сделать свою кнопку для отправки формы
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL