Mein Terminal verfügt über Sondertasten, wie ^C zur Unterbrechung, ^\ zum Dump des Kerns, ^W zum Löschen eines Wortes und ^U zum Löschen einer Zeile. Sondertasten gibt es in xterm und anderen Terminalemulatoren, aber sie sind nicht in jedem Terminal gleich. POSIX-Anwendungen können tcgetattr() oder tcsetattr() in <termios.h> aufrufen, um diese Sondertasten zu erhalten oder zu setzen. Sie können auch einige Tasten deaktivieren, zum Beispiel:
tcgetattr(fd, tp);
tp->c_lflag &= ~ISIG; /* disable all the signal keys */
tp->c_cc[WERASE] = _POSIX_VDISABLE; /* disable the word-erase key */
tcsetattr(fd, tp);
Vor POSIX.1-2001 war die Unterstützung für _POSIX_VDISABLE optional. Es gab 3 Möglichkeiten:
- _POSIX_VDISABLE wurde definiert und nicht -1. Dann kann jedes Terminal _POSIX_VDISABLE verwenden, um eine spezielle Taste zu deaktivieren.
- _POSIX_VDISABLE definiert wurde und -1. Dann kann kein Terminal _POSIX_VDISABLE verwenden.
- _POSIX_VDISABLE war nicht definiert. Dann könnte der Wert zum Deaktivieren einer speziellen Taste für jedes Terminal unterschiedlich sein. Ein Aufruf wie
pathconf("/dev/tty", _PC_VDISABLE)
würde den Wert für dieses Terminal zurückgeben, oder -1, wenn dieses Terminal keinen Wert zum Deaktivieren einer speziellen Taste hat.
Als Systeme <termios.h> hinzufügten, haben alle oder fast alle Systeme _POSIX_VDISABLE definiert und nicht -1. Ich habe mir einige alte Systeme in der Unix-Baum . Alle Minix 1.5 (1989), Linux 0.96c (1992) und 4.4BSD (1993) haben _POSIX_VDISABLE definiert und nicht -1. (Vor POSIX gab es <termios.h> nicht, und die Systeme benutzten einen anderen Header wie <sgtty.h>, um das Terminal zu konfigurieren).
POSIX-1.2001 verlangt lediglich, dass _POSIX_VDISABLE definiert ist und nicht -1. POSIX.1-2001 sagte für <unistd.h> ,
_POSIX_VDISABLE
Dieses Symbol ist als Wert eines Zeichens zu definieren, das die Behandlung von Sonderzeichen am Terminal gemäß der Beschreibung in <termios.h> . Dieses Symbol muss immer auf einen anderen Wert als -1 gesetzt werden.
In der Begründung heißt es ,
Als Teil der Überarbeitung wurden die Optionen an das FIPS 151-2 Profil des POSIX.1-1990 Standards angepasst. Die folgenden Optionen des POSIX.1-1990-Standards sind nun obligatorisch:
- _POSIX_JOB_CONTROL
- _POSIX_SAVED_IDS
- _POSIX_VDISABLE