^D
Znaków (znany również jako \04
lub 0x4, Koniec transmisji w Unicode) jest wartością domyślną dla eof
specjalnego parametru znak kontrolny terminalu lub sterownika pseudo-terminala w jądrze (a dokładniej z tty
dyscypliną linia dołączone do szeregowego lub pseudo- urządzenie tty ). To c_cc[VEOF]
o termios
strukturze przekazywane do TCSETS / TCGETS ioctl
jeden problemy z urządzeniem końcowym, aby wpływać na zachowanie kierowcy.
Typowe polecenie, które je wysyła, ioctls
to stty
polecenie.
Aby pobrać wszystkie parametry:
$ stty -a
prędkość 38400 bodów; rzędy 58; kolumny 191; linia = 0;
intr = ^ C; quit = ^ \; kasowanie = ^ ?; kill = ^ U; eof = ^ D ; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^ Q; stop = ^ S; susp = ^ Z; rprnt = ^ R; werase = ^ W; lnext = ^ V; kolor = ^ O;
min = 1; czas = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Ten eof
parametr jest istotny tylko wtedy, gdy urządzenie końcowe znajduje się w icanon
trybie.
W tym trybie sterownik terminala (nie emulator terminala) implementuje bardzo prosty edytor linii , w którym można wpisać, Backspaceaby usunąć znak, Ctrl-Uaby usunąć całą linię ... Gdy aplikacja czyta z urządzenia końcowego, nie widzi nic, dopóki Naciśnięcie Returnw tym momencie read()
zwraca pełną linię w tym ostatnim LF
znaku (domyślnie sterownik terminala przekłada się również CR
wysłana z terminala na Returncelu LF
).
Teraz, jeśli chcesz wysłać to, co do tej pory wpisałeś bez naciskania Enter, tam możesz wpisać eof
znak. Po otrzymaniu tego znaku z emulatora terminala sterownik terminala przesyła bieżącą treść wiersza, aby aplikacja wykonująca read
go otrzymała go takim, jaki jest (i nie będzie zawierała LF
znaku końcowego ).
Teraz, jeśli bieżąca linia była pusta i pod warunkiem, że aplikacja będzie w pełni czytać wcześniej wprowadzone linie, read
zwróci 0 znaków.
Oznacza to koniec pliku dla aplikacji (kiedy czytasz z pliku, czytasz, dopóki nie będzie już nic więcej do odczytania). Dlatego nazywa się to eof
znakiem, ponieważ wysłanie go powoduje, że aplikacja widzi, że nie ma już żadnych danych wejściowych.
Teraz nowoczesne powłoki, po ich wyświetleniu, nie ustawiają terminala w icanon
trybie, ponieważ implementują własny edytor linii, który jest znacznie bardziej zaawansowany niż wbudowany sterownik terminala. Jednak w swoim własnym edytorze liniowym , aby uniknąć mylenia użytkowników, nadają one ^D
znakowi (lub jakiemukolwiek ustawieniu terminala eof
jakieś znaczenie) temu samemu znaczeniu (oznaczać eof
).