next up previous contents
Next: Kontrola i informacja o Up: Przenoszenie aplikacji do Linuxa Previous: Sygnały obsługiwane przez Linuxa   Contents

I/O terminala

Tak jak sygnały, kontrola I/O terminala ma trzy różne implementacje pod SVR4, BSD i POSIX.1.

SVR4 używa struktury termio, oraz różnych wywołań ioctl ( takich jak TCSETA, TCGETA, itd. ) na urządzeniu terminala w celu uzyskania lub ustawienia parametrów struktury termio. Struktura ta ma postać:

     struct termio {
       unsigned short c_iflag;  /* Tryby wejścia */
       unsigned short c_oflag;  /* Tryby wyjścia */
       unsigned short c_cflag;  /* Tryby kontroli */
       unsigned short c_lflag;  /* Tryby ustawiania (discipline) linii */
       char c_line;             /* Porządek (discipline) linii */
       unsigned char c_cc[NCC]; /* Znaki kontrolne */
     };
   

Pod BSD używana jest struktura sgtty w powiązaniu z różnymi wywołaniami ioctl, takimi jak TIOCGETP, TIOCSETP, itd.

Pod POSIX używana jest struktura termios, oraz różne funkcje zdefiniowane przez POSIX.1, takie jak: tcsetattr i tcgetattr. Struktura termios jest identyczna ze strukturą termio używaną przez SVR4, jednocześnie typy mają zmienione nazwy ( np.:tcflag_t zamiast unsigned short ), a NCCS używane jest dla określenia rozmiaru tablicy c_cc.

Pod Linuxem obsługiwane przez jądro są termios z POSIX.1 i termio z SVR4. Oznacza to, że program korzystający z którejś z tych metod powinien skompilować się pod Linuxem. Jeżeli nie wierzysz w to, bardzo łatwo zmodyfikować kod używający termio aby używał termios, wystarczy odrobina wiedzy. Na szczęście, to nigdy nie powinno być konieczne. Należy jednak zwrócić uwagę na to czy program zamierza użyć pole c_line znajdujące się w termio. Dla większości aplikacji wartością powinno być N_TTY, a gdy program zakłada, że inne ustawienie linii jest dostępne możesz mieć kłopoty.

Jeżeli twój program używa sgtty z BSD, możesz go zlinkować z libbsd.a. To zastąpi żądania I/O ioctl na wywołania termios z POSIX, których używa jądro. Jeżeli kompilując taki program okaże się, że symbole takie jak TIOCGETP są niezdefiniowane będziesz musiał zlinkować program z libbsd.


next up previous contents
Next: Kontrola i informacja o Up: Przenoszenie aplikacji do Linuxa Previous: Sygnały obsługiwane przez Linuxa   Contents

2000-03-01


Poltronic