Frage

Ich will meine eigene psuedo-Shell schreiben und möchte schöne Farben bekommen usw. Wie gehe ich über einen Teilprozess zu denken austricksen, dass es in einem TTY ist? Ich habe über virtuelle TTY die gelesen haben, aber nicht gefunden viel praktische Informationen darüber, wie entweder eine erstellen oder wie das ein subProzess denken lässt, dass isatty(stdout) == 1.

War es hilfreich?

Lösung

Was Sie suchen sind Pseudo genannt, pseudo-tty oder ptys. Diese bestehen im Master / Slave-Paare, dass verhalten sich ähnlich wie Buchsenpaare (die bidirektionale Version von Rohren, welche mit einem Ende geschrieben wird, kann auf der anderen gelesen werden). Im Steuerprozess verwendet posix_openpt einen Master zu öffnen, dann auf ptsname erhalten den Namen des Slave (wahrscheinlich /dev/pts/X):

int master = posix_openpt(O_RDWR | O_NOCTTY);
grantpt(master);     /* change ownership and permissions */
unlockpt(master);    /* must be called before obtaining slave */
int slave = open(ptsname(master), O_RDWR | O_NOCTTY);

Wie üblich, kann jede Funktion fehlschlagen, so die Fehlerüberprüfung hinzufügen. Die slave fd bezieht sich nun auf die Slave-Vorrichtung. Verwendung dup2(slave, STDOUT_FILENO) in den untergeordneten Prozess zu eingestellten Standardausgabe an den Slave Pseudoterminal; in ähnlicher Weise für stdin und stderr.

(Beachten Sie, dass einige Linux Manpages falsch Zustand dass posix_openpt kehrt char *. Auch don ‚t erhalten durch die openpty Familie von Funktionen verwechselt;. diese stellen eine ältere Schnittstelle zu pseudo-tty, die veraltet ist)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top