pty(7)

NAZWA
pty - interfejsy pseudoterminala

OPIS
Pseudoterminal (czas skrótowo nazywany „pty”) stanowi parę wirtualnych urządzeń znakowych, zapewniających dwukierunkowy kanał komunikacji. Jeden koniec kanału nazywany jest nadrzędnym (ang. master), a drugi podrzędnym (ang. slave).

Końcówka podrzędna pseudoterminala zapewnia interfejs działający dokładnie tak, jak klasyczny terminal. Proces, który oczekuje na podłączenie do terminala, może otworzyć końcówkę podrzędną pseudoterminala i następnie być kierowany przez program, który otworzył końcówkę nadrzędną. Wszystko co zostanie zapisane po stronie nadrzędnej jest przekazywane procesowi po stronie podrzędnej tak, jak gdyby było to wejście wpisane na terminalu. Na przykład wpisanie znaku przerwania (zwykle control-C) na głównym urządzeniu wygeneruje sygnał przerwania (SIGINT) dla grupy procesów w tle, podłączonej do urządzenia podrzędnego. I odwrotnie, wszystko co jest napisane na końcówce podrzędnej pseudoterminala, może być odczytane przez proces podłączony do końcówki nadrzędnej.

Przepływ danych pomiędzy urządzeniem nadrzędnym i podrzędnym następuje asynchronicznie, podobnie jak w przypadku fizycznych terminali. Dane zapisane na końcówce podrzędnej staną się dostępne na końcówce nadrzędnej niezwłocznie, lecz niekoniecznie natychmiastowo. Podobnie, może wystąpić niewielkie opóźnienie pomiędzy zapisem na urządzeniu nadrzędnym i uwidocznieniem tego na urządzeniu podrzędnym.

Historycznie wyewoluowały dwa interfejsy pseudoterminali: BSD i Systemu V. SUSv1 zestandaryzowało interfejs pseudoterminala w oparciu o API Systemu V, zatem powinno być ono używane przez wszystkie nowe programy korzystające z pseudoterminali.

Linux zapewnia pseudoterminale w stylu BSD i (zgodne ze standardem) w stylu Systemu V. Terminale w stylu Systemu V w systemach Linux są często zwane pseudoterminalami UNIX 98.

Od Linuksa 2.6.4, pseudoterminale w stylu BSD są uważane za przestarzałe, ich obsługę można wyłączyć w czasie budowania jądra, wyłączając opcję CONFIG_LEGACY_PTYS (od Linuksa 2.6.30, opcja ta jest domyślnie wyłączona w standardowym jądrze). W nowych aplikacjach powinno się używać pseudoterminali UNIX 98.

  Pseudoterminale UNIX 98
Nieużywane urządzenie nadrzędne pseudoterminala UNIX 98 otwiera się wywołując posix_openpt(3) (funkcja ta otwiera urządzenie klonowania końcówki nadrzędnej, /dev/ptmx; zob pts(4)). Po dokonaniu zależnych od programu inicjalizacji, zmiany właściciela i uprawnień urządzenia podrzędnego za pomocą grantpt(3) oraz odblokowania urządzenia podrzędnego poprzez unlockpt(3)), odpowiadające urządzenie podrzędne można otworzyć przekazując nazwę zwróconą przez ptsname(3) w wywołaniu do open(2).

Jądro Linux narzuca limit na liczbę dostępnych pseudoterminali UNIX 98. Do Linuksa 2.6.3 włącznie, konfiguruje się go w trakcie kompilacji (CONFIG_UNIX98_PTYS), a dozwolona liczba pseudoterminali może wynosić do 2048, z domyślnym ustawieniem 256. Od Linuksa 2.6.4, limit ten można dostosować dynamicznie za pomocą /proc/sys/kernel/pty/max, a odpowiedni plik /proc/sys/kernel/pty/nr, wskazuje jak wiele pseudoterminali jest obecnie w użyciu. Więcej informacji o tych dwóch plikach znajduje się w podręczniku proc(5).

  Pseudoterminale BSD
Pseudoterminale w stylu BSD są zapewniane jako utworzona wcześniej para, z nazwami w postaci /dev/ptyXY (nadrzędne) i /dev/ttyXY (podrzędne), gdzie X jest literą z 16-znakowego zbioru [p-za-e], a Y jest literą z 16-znakowego zbioru [0-9a-f] (dokładny zakres liter w obu zbiorach różni się w poszczególnych implementacjach Uniksa). Na przykład /dev/ptyp1 i /dev/ttyp1 stanowią parę pseudoterminali BSD. Proces znajdowania nieużywanej pary terminali polega na próbowaniu otwarcia kolejnych urządzeń nadrzędnych za pomocą open(2), do momentu aż się to powiedzie. Można wówczas otworzyć odpowiadające urządzenie podrzędne (w nazwie nadrzędnej należy zamienić „tty” na „pty”).

PLIKI

/dev/ptmx
    urządzenie klonowania końcówki nadrzędnej UNIX 98

/dev/pts/*
    urządzenia podrzędne UNIX 98

/dev/pty[p-za-e][0-9a-f]
    urządzenia nadrzędne BSD

/dev/tty[p-za-e][0-9a-f]
    urządzenia podrzędne BSD

UWAGI
Pseudoterminale są używane przez aplikacje takie jak usługi logowania sieciowego (ssh(1), rlogin(1), telnet(1)), emulatory terminala m.in. xterm(1), script(1), screen(1), tmux(1), unbuffer(1) i expect(1).

Opis ioctl(2) TIOCPKT, kontrolującej pakietowy tryb działania można znaleźć w podręczniku ioctl_tty(2).

Operacji TIOCSTOP, TIOCSTART, TIOCUCNTL i TIOCREMOTE ioctl(2) BSD nie zaimplementowano w Linuksie.

ZOBACZ TAKŻE
ioctl_tty(2), select(2), setsid(2), forkpty(3), openpty(3), termios(3), pts(4), tty(4)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.