Какой смысл Ctrl-S?

135

Ctrl+ Sостанавливает весь вывод на терминал, который можно перезапустить с помощью Ctrl+ Q.

Но почему Ctrl+ Sсуществует в первую очередь? Какую проблему пытались решить, установив эту последовательность управления?

Джефф Кинг
источник
5
Смотрите: linusakesson.net/programming/tty (прочитайте все, но особенно раздел об управлении потоком ...)
Оливье Дюлак
8
Использовали Ctrl-S / Ctrl-Q, чтобы много раз сохранять мой бекон, чтобы остановить быстрый вывод сообщений об ошибках в едва функциональной системе, чтобы я мог видеть, что это было.
DocSalvager
4
Как примечание стороны, у меня есть это в моем .bashrcотключить обе функции: stty stop ''; stty start '';. Это Ctrl-S бесплатно для использования в качестве экранирующего символа для листьев screen, с этим по моему .screenrc: escape ^Ss. Что, в свою очередь, означает, что я могу использовать стандартный readlineярлык Ctrl-A для «начала строки» (соответствует Ctrl-E для «конца строки» и менее хрупок для эмуляции терминала, чем Home и End). : D
IMSoP

Ответы:

155

Задолго до появления компьютеров существовали телепринтеры (так называемые телетайп, так называемые телетайпы). Думайте о них, как о примерно той же технологии, что и телеграф, но с подключенной клавиатурой и принтером.

Поскольку телетайпы уже существовали, когда компьютеры создавались впервые, и поскольку компьютеры в то время были размером с комнату, телетайпы стали удобным пользовательским интерфейсом для первых компьютеров - введите команду, нажмите кнопку отправки, подождите некоторое время и Вывод команды печатается на листе бумаги перед вами.

Программное обеспечение управления потоком возникло примерно в эту эпоху - если принтер не мог печатать так быстро, как телетайп получал данные, например, телетайп мог отправить команду управления потоком XOFF ( Ctrl+ S) на удаленную сторону, говоря «Остановите передачу на данный момент». , а затем может отправить команду управления потоком XON ( Ctrl+ Q) удаленной стороне, говоря: «Я догнал, пожалуйста, продолжайте».

И это использование сохраняется в Unix, потому что современные эмуляторы терминалов эмулируют физические терминалы (например, vt100 ), которые сами (в некотором смысле) эмулировали телетайпы.

godlygeek
источник
29
Скорее всего, не «напечатанный на листе бумаги», а «напечатанный на стопку согнутой бумаги».
Дубу
3
Или в рулон перфоленты!
mdpc
2
Я не думаю, что control-S и control-Q первоначально использовались для запуска и остановки вывода с компьютеров, а скорее с считывателей бумажных лент, подключенных к другим телетайпам . Я не думаю, что был бы большой интерес к подключению телетайпов к компьютерам до появления систем с разделением времени. В противном случае, каждый раз, когда компьютер ждет, пока пользователь наберет что-то, это время, которое он не тратит на что-то полезное.
суперкат
2
Или к рулону 8½ʹʹ бумаги.
Скотт
44
В 1987 году я заставил вспыхнуть последний выживший в моем университете телетайп. Использовал его как серийный принтер и не подозревал, что он перегрелся, если бы печатал 35 страниц непрерывно. Перегрев просто пах плохо, но затем бумага загорелась из-за жары. Только тогда они сказали мне, что я должен был давать Ctrl-S каждые 2 страницы или около того, чтобы дать ему остыть в течение пары минут.
Тонни
25

Это управляющий персонаж со времен терминалов VT100 и подобных. На этих терминалах была ограниченная возможность прокрутки (если таковая имеется), чтобы начать с CTRL-S, что позволило вам заморозить вывод, чтобы увидеть то, что в данный момент находится на экране, без его списания.

Почти все, что вы видите в современных терминалах, было создано для эмуляции этих старых терминальных систем.

Livinglifeback
источник
Это то, что я слышал (а не ответ телепринтера, хотя возможно (возможно, даже), что именно поэтому такая функциональность была сохранена.) Я использовал Cntr-S для этой цели, когда возникли проблемы с более или менее
Линдон Уайт
2
Механическая потребность запустить / остановить вывод возникла до того, как человеку понадобится прочитать его!
TripeHound
@TripeHound: Действительно, это произошло задолго до того, как появились какие-то особые ожидания, что люди будут смотреть на информацию, пока она была получена (кто-то, кто с нетерпением ждет истории, может посмотреть, как она была получена телетайпом, но у операторов обычно есть вещи получше сделать).
суперкат
21

Кстати, если вы выводите длинный вывод на экран, есть вероятность, что вы не обязательно читаете так быстро, как компьютер, который выплевывает вывод. Использование CTRL-S / CTRL-Q на кошке (или активном хвосте) ОЧЕНЬ полезно для остановки и возобновления вывода.

Якорь,
источник
25
lessболее.
dotancohen
2
@dotancohen: Очень смешно. Даже moreне было представлено до тех пор, пока не прошло четыре или пять лет после выхода первого Unix (с показом cat, но неcat -v ). Также обратите внимание, что до Unix существовали другие (интерактивные) операционные системы с разделением времени ; например, RSTS .
Скотт
2
@dotancohen Я предпочитаю less, но люди говорят , что, в то время как lessэто more, mostпо - прежнему больше , чем less!
Фолькер Сигел
1
@VolkerSiegel: Спасибо, что познакомили меня с most! Если бы вы не знали о программе, позволяющей увидеть файл изображения (gif, jpg, png) поверх ssh, я хотел бы услышать об этом. Я в настоящее время использую asciiviewили, img2txtно ни один не удовлетворителен.
dotancohen
2
@VolkerSiegel: Также спасибо за большинство ! Как говорит автор: «Зачем соглашаться на меньшее?». Пользователи Debian могут apt-get install most.
mivk
17

На древних телетайпах с устройством чтения бумажных лент получение управляющего Q включало бы устройство чтения бумажных лент и начинало посылать символы с ленты, как если бы они были набраны на клавиатуре. Control-S отключит устройство чтения бумажных лент. Если учесть, что телетипы изначально предназначались не для печати данных с компьютеров, а скорее из других телетипов, должно быть совершенно ясно, как «отключить устройство чтения бумажной ленты» можно истолковать как аналог «запроса другого конца о прекращении передачи».

Между прочим, control-R включит перфорацию на бумажной ленте, так что каждый символ, полученный телетайпом (или, если включен локальный эхо, набранный на клавиатуре), также будет перфорирован на бумажную ленту; control-T отключит удар бумажной ленты. В отличие от операций, связанных с control-S и control-Q, эти операции, похоже, не имеют современного эквивалента.

Кроме того, первоначальные имена для control-Q / R / S / T были DC1 / DC2 / DC3 / DC4 («Управление устройством 1» и т. Д.). Хотя я не уверен в истории, такое именование предполагает, что первоначально они были предназначены для запуска какого-то неуказанного вида действий, но наиболее распространенным, что люди делали с DC1 и DC3, было управление устройством чтения бумажных лент.

Supercat
источник