Wie mache ich ^ T für den Status char unter Linux?

529
tchrist

Ich habe mich wirklich an den BSD-Status char, ^ T gewöhnt, seit ich ihn in den 80er Jahren zum ersten Mal an der Universität eingesetzt habe. Es stammt nicht von BSD, sondern von noch älteren Betriebssystemen. Es funktioniert auch auf modernen BSD-Systemen, einschließlich Darwin. Dies ist ein Beispiel für MacOS, bei dem ich dreimal innerhalb von grep ^ T drücke, bevor ich ^ D drücke:

darwin% stty all speed 38400 baud; 93 rows; 124 columns; lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel -iutf8 -ignbrk brkint -inpck -ignpar -parmrk oflags: opost onlcr -oxtabs -onocr -onlret cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow -dtrflow -mdmbuf discard dsusp eof eol eol2 erase intr kill lnext  ^O ^Y ^D <undef> <undef> ^H ^C ^U ^V  min quit reprint start status stop susp time werase  1 ^\ ^R ^Q ^T ^S ^Z 0 ^W   darwin% grep foo load: 0.05 cmd: grep 7227 waiting 0.00u 0.00s load: 0.05 cmd: grep 7227 waiting 0.00u 0.00s load: 0.05 cmd: grep 7227 waiting 0.00u 0.00s 

Und das ist das Gleiche bei OpenBSD, wo es sogar noch besser ist, da ich den Wartekanal bekomme

openbsd% stty all speed 38400 baud; 93 rows; 124 columns; lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc -xcase iflags: -istrip icrnl -inlcr -igncr -iuclc ixon -ixoff ixany imaxbel -ignbrk brkint -inpck -ignpar -parmrk oflags: opost onlcr -ocrnl -onocr -onlret -olcuc oxtabs -onoeot cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -mdmbuf discard dsusp eof eol eol2 erase intr kill lnext  ^O ^Y ^D <undef> <undef> ^H ^C ^U ^V  min quit reprint start status stop susp time werase  1 ^\ ^R ^Q ^T ^S ^Z 0 ^W   openbsd% grep foo load: 0.67 cmd: grep 3759 [ttyin] 0.00u 0.02s 0% 190k load: 0.67 cmd: grep 3759 [ttyin] 0.00u 0.02s 0% 190k load: 0.67 cmd: grep 3759 [ttyin] 0.00u 0.02s 0% 190k 

Wie Sie sehen, ist es wirklich großartig zu wissen, was ein Programm macht, wenn es nach Süden geht. Beachten Sie, dass unter OpenBSD nicht nur der Wartekanal, sondern auch der Prozessspeicher und der CPU-Prozentsatz angezeigt werden.

Meine Frage ist: Gibt es eine Möglichkeit, dass dies unter Linux funktioniert?

Es funktioniert jedoch nicht unter Linux. Gibt es eine Möglichkeit, damit es funktioniert? Hat das schon jemand gemacht? Im c_ch[]Array scheint dafür genügend Platz zu sein, da Linux dort mit ungenutzten Steckplätzen viel Platz zu haben scheint.

Hier ist die Linux- /usr/include/bits/termios.hDatei:

#define NCCS 32 struct termios { tcflag_t c_iflag; /* input mode flags */ tcflag_t c_oflag; /* output mode flags */ tcflag_t c_cflag; /* control mode flags */ tcflag_t c_lflag; /* local mode flags */ cc_t c_line; /* line discipline */ cc_t c_cc[NCCS]; /* control characters */ speed_t c_ispeed; /* input speed */ speed_t c_ospeed; /* output speed */ #define _HAVE_STRUCT_TERMIOS_C_ISPEED 1 #define _HAVE_STRUCT_TERMIOS_C_OSPEED 1 };  /* c_cc characters */ #define VINTR 0 #define VQUIT 1 #define VERASE 2 #define VKILL 3 #define VEOF 4 #define VTIME 5 #define VMIN 6 #define VSWTC 7 #define VSTART 8 #define VSTOP 9 #define VSUSP 10 #define VEOL 11 #define VREPRINT 12 #define VDISCARD 13 #define VWERASE 14 #define VLNEXT 15 #define VEOL2 16 

Es scheint, als seien 17 von 32 Slots im c_cc[]definierten Linux- Array definiert. Können diese wirklich verwendet werden? Ich frage mich, warum sie nicht als Ersatzteile gekennzeichnet sind.

Auf OpenBSD /use/include/sys/termios.hgibt es folgende:

/* * Special Control Characters * * Index into c_cc[] character array. * * Name Subscript Enabled by */ #define VEOF 0 /* ICANON */ #define VEOL 1 /* ICANON */ #if __BSD_VISIBLE #define VEOL2 2 /* ICANON */ #endif #define VERASE 3 /* ICANON */ #if __BSD_VISIBLE #define VWERASE 4 /* ICANON */ #endif #define VKILL 5 /* ICANON */ #if __BSD_VISIBLE #define VREPRINT 6 /* ICANON */ #endif /* 7 spare 1 */ #define VINTR 8 /* ISIG */ #define VQUIT 9 /* ISIG */ #define VSUSP 10 /* ISIG */ #if __BSD_VISIBLE #define VDSUSP 11 /* ISIG */ #endif #define VSTART 12 /* IXON, IXOFF */ #define VSTOP 13 /* IXON, IXOFF */ #if __BSD_VISIBLE #define VLNEXT 14 /* IEXTEN */ #define VDISCARD 15 /* IEXTEN */ #endif #define VMIN 16 /* !ICANON */ #define VTIME 17 /* !ICANON */ #if __BSD_VISIBLE #define VSTATUS 18 /* ICANON */ /* 19 spare 2 */ #endif #define NCCS 20 

Ich frage mich, warum es unter Darwin so viele Ersatzteile gibt, da es unter OpenBSD nur zwei Ersatzteile gibt. Trotzdem sieht es so aus, als sollte dies möglich sein, daher kann ich mir nicht vorstellen, dass niemand seinen Kernel (als stty (1) usw.) gehackt hat, um ihn zu unterstützen.

Gibt es Hinweise auf Arbeitsimplementierungen, bevor ich mir die Hände schmutzig mache?

1

0 Antworten auf die Frage