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

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

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

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

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

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

#include <unistd.h> /* POSIX */

int isacty(int desc);

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

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

3.3. Консоль, виртуальные терминалы и оболочка

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

3.3. Консоль, виртуальные терминалы и оболочка Итак, вы приобрели первый опыт работы в текстовом, или "консольном", режиме системы Linux. Понятия "терминала" и "консоли", которые встретятся нам еще не раз, требуется, вероятно, дополнительно пояснить.Когда создавалась система UNIX,


Терминалы связи

Из книги Asterisk™: будущее телефонии Второе издание автора Меггелен Джим Ван

Терминалы связи «Терминал связи» - это старый термин, исчезнувший на пару десятков лет и воспроизведенный здесь, пожалуй, лишь по той причине, что его надо обсудить, прежде чем он в конечном счете исчезнет вновь или станет повсеместно распространенным.Сначала немного


13.5.1 Терминалы ASCII

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

13.5.1 Терминалы ASCII Терминалы ASCII используются с Unix и компьютерами VAX компании Digital Equipment Corporation. Эти терминалы обеспечивают:? Удаленную эхо-печать (remote echoing) каждого символа. Т.е. каждый посланный удаленному хосту символ возвращается назад, до того как будет отображен на


13.5.3 Терминалы IBM 3270 и 5250

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

13.5.3 Терминалы IBM 3270 и 5250 Большие ЭВМ компании IBM поддерживают работу сотен или тысяч интерактивных терминалов. Многие годы для этого использовались терминалы IBM 3270, лицензированные данной компанией. Они были специально оптимизированы для приложений обработки


Глава 16 Терминалы и псевдотерминалы

Из книги Наглядный самоучитель работы на нетбуке автора Сенкевич Г. Е.

Глава 16 Терминалы и псевдотерминалы Устройства, предназначенные для интерактивного использования[107], обладают сходным интерфейсом, который был выведен десятилетия назад для последовательных терминалов TeleType и получил название tty. Интерфейс tty используется для доступа к


16.1.2. Управляющие терминалы

Из книги автора

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