2012-05-03 18 views
26

Zarówno deskryptory plików stdin, jak i stdout wskazują na to. Jak to działa? Czy ktoś może wskazać dobry zasób do zrozumienia terminali UNIX i wywołań systemowych, które wchodzą w interakcje z nim.Co to jest/dev/tty w systemie UNIX?

Odpowiedz

40

dev/tty to obiekt systemu plików reprezentujący bieżącą konsolę. Kopiowanie plików do tego „katalogu” z linii poleceń wypisuje zawartość tych plików do konsoli:

cp myfile.txt /dev/tty 

jest równoważna

cat myfile.txt 

Obiekty te są tam do pozwalają korzystać z pliku znajomy Interfejsy API do interakcji z konsolą. Jest to sprytny sposób na ujednolicenie interfejsu API konsoli z interfejsem API pliku. Możesz korzystać z fopen, fprintf itp., Aby wchodzić w interakcję z konsolą w ten sam sposób, w jaki wchodzisz w interakcje ze zwykłymi plikami.

Ten przykład pisze "Hello, world\n" do terminala:

#include <stdio.h> 

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

Jakie są pseudoterminals? Jak mogę z nimi współdziałać? – Bruce

+4

@Bruce Pseudo-terminale są abstrakcjami wzdłuż linii '/ dev/tty', które reprezentują na przykład inne logiczne terminale, które nie odpowiadają fizycznemu terminalowi. Możesz je zobaczyć w pracy, otwierając dwa okna xterm, wpisując w nich "tty", aby zobaczyć ich pseudo terminalowe nazwy, a następnie kopiując plik w jednym oknie do drugiego. Na przykład, jeśli wpiszesz 'tty' i otrzymasz'/dev/ttys002' w jednym oknie i '/ dev/ttys000' w drugim, możesz skopiować plik z jednego xterma do' ttys ... ' inne, a treść będzie wyświetlana w drugim oknie. – dasblinkenlight

+0

jaka jest aplikacja/zastosowanie ujednolicenia dwóch interfejsów API i zapewnienie takiej funkcji? –