Какой смысл 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 ), которые сами (в некотором смысле) эмулировали телетайпы.


29
Скорее всего, не «напечатанный на листе бумаги», а «напечатанный на стопку согнутой бумаги».
— Дубу

3
Или в рулон перфоленты!
— mdpc

2
Я не думаю, что control-S и control-Q первоначально использовались для запуска и остановки вывода с компьютеров, а скорее с считывателей бумажных лент, подключенных к другим телетайпам . Я не думаю, что был бы большой интерес к подключению телетайпов к компьютерам до появления систем с разделением времени. В противном случае, каждый раз, когда компьютер ждет, пока пользователь наберет что-то, это время, которое он не тратит на что-то полезное.
— суперкат

2
Или к рулону 8½ʹʹ бумаги.
— Скотт

44
В 1987 году я заставил вспыхнуть последний выживший в моем университете телетайп. Использовал его как серийный принтер и не подозревал, что он перегрелся, если бы печатал 35 страниц непрерывно. Перегрев просто пах плохо, но затем бумага загорелась из-за жары. Только тогда они сказали мне, что я должен был давать Ctrl-S каждые 2 страницы или около того, чтобы дать ему остыть в течение пары минут.
— Тонни

25

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

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


Это то, что я слышал (а не ответ телепринтера, хотя возможно (возможно, даже), что именно поэтому такая функциональность была сохранена.) Я использовал 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, было управление устройством чтения бумажных лент.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.