^D
Символ (також відомий як \04
або 0x4, Кінець передачі в Unicode) є значенням за замовчуванням для eof
спеціального параметра керуючих символів терміналу або псевдо-термінального драйвера в ядрі (точніше з tty
лінії дисципліна прикріплена до послідовного або псевдо- tty пристрій ). Ось c_cc[VEOF]
така termios
структура, передана TCSETS / TCGETS, ioctl
одна проблема видає термінальному пристрою, щоб вплинути на поведінку драйвера.
Типовою командою, яка надсилає їх, ioctls
є stty
команда.
Щоб отримати всі параметри:
$ stty -a
швидкість 38400 бод; рядки 58; колонки 191; рядок = 0;
intr = ^ C; кинути = ^ \; стерти = ^ ?; вбити = ^ U; eof = ^ D ; eol = <undef>; eol2 = <undef>; swtch = <undef>; старт = ^ Q; стоп = ^ S; susp = ^ Z; rprnt = ^ R; werase = ^ W; наступний = ^ V; змивання = ^ О;
хв = 1; час = 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
Цей eof
параметр є актуальним лише тоді, коли термінальний пристрій у icanon
режимі.
У такому режимі драйвер терміналу (а не емулятор терміналу) реалізує дуже простий редактор рядків , де ви можете ввести Backspaceстирання символу, Ctrl-Uвидалити всю лінію ... Коли програма читає з термінального пристрою, вона нічого не бачить, поки ви натискаєте Returnна який момент read()
повертає повну рядок , включаючи останній LF
символ (за замовчуванням, драйвер терміналу також переводить CR
розсилається термінал на Returnдо LF
).
Тепер, якщо ви хочете надіслати те, що ви ввели до цього часу, не натискаючи Enter, саме там ви можете ввести eof
символ. Отримавши цей символ від емулятора терміналу, драйвер терміналу подає поточний вміст рядка, так що програма, що робить read
його, отримає його таким, який є (і він не буде містити LF
символу трейлінгу ).
Тепер, якщо поточний рядок був порожнім і за умови, що програма буде повністю прочитати раніше введені рядки, read
повернеться 0 символів.
Це означає, що кінець файлу в програмі (коли ви читаєте з файлу, ви читаєте, поки більше нічого не можна прочитати). Ось чому його називають eof
символом, оскільки його надсилання змушує програму бачити, що більше немає вводу.
Тепер, сучасні оболонки, за їх підказкою, не встановлюють термінал у icanon
режимі, оскільки вони реалізують власний редактор рядків, який значно досконаліший, ніж вбудований драйвер терміналу. Однак у власному редакторі рядків , щоб не плутати користувачів, вони надають ^D
символу (або будь-якому встановленню терміналу eof
з деякими) те саме значення (для позначення eof
).