2012-05-03 5 views
26

Оба дескриптора файла stdin и stdout указывают на это. Как это работает? Может ли кто-то указать на хороший ресурс для понимания терминалов UNIX и системных вызовов, которые взаимодействуют с ним.Что такое/dev/tty в UNIX?

ответ

40

dev/tty - объект файловой системы, представляющий текущую консоль. Копирование файлов в этот «каталог» из командной строки выводит содержимое этих файлов на консоль:

cp myfile.txt /dev/tty 

эквивалентно

cat myfile.txt 

Эти объекты существуют, чтобы позволить вам использовать знакомый файл API для взаимодействия с консолью. Это умный способ унифицировать консольный API с файловым API. Вы можете использовать fopen, fprintf и т. Д., Чтобы взаимодействовать с консолью так же, как вы взаимодействуете с обычными файлами.

Этот пример записывает "Hello, world\n" на терминал:

#include <stdio.h> 

int main (int argc, const char * argv[]) { 
    FILE *f = fopen("/dev/tty", "w"); 
    fprintf(f, "Hello, world!\n"); 
    return 0; 
} 
+1

Что псевдотерминалы? Как я могу взаимодействовать с ними? – Bruce

+4

@Bruce Псевдо-терминалы представляют собой абстракции вдоль линий '/ dev/tty', которые представляют собой, например, другие логические терминалы, которые не соответствуют физическому терминалу. Вы можете увидеть их на работе, открыв два окна xterm, набрав в них 'tty', чтобы увидеть их псевдотерминальные имена, а затем скопировать файл в одно окно в другое. Например, если вы наберете 'tty' и вы получите'/dev/ttys002' в одном окне и '/ dev/ttys000' в другом, вы можете скопировать файл с одного xterm в' ttys ... 'из другой, и содержимое будет отображаться в другом окне. – dasblinkenlight

+0

Что такое применение/использование объединения двух API и предоставление такой функции? –

Смежные вопросы