Qual é o objetivo do Ctrl-S?

135

Ctrl+ Sinterrompe toda a saída do terminal que pode ser reiniciada com Ctrl+ Q.

Mas, por que Ctrl+ Sexiste em primeiro lugar? Que problema estava tentando ser resolvido colocando essa sequência de controle no lugar?

Jeff King
fonte
5
Veja: linusakesson.net/programming/tty (ler tudo, mas especialmente a seção sobre controle de fluxo ...)
Olivier Dulac
8
Usei Ctrl-S / Ctrl-Q para salvar meu bacon muitas vezes para parar a saída descontrolada de mensagens de erro em um sistema quase funcional, para que eu pudesse ver o que eram.
DocSalvager
4
Como uma nota lateral, eu tenho isso no meu .bashrcdesactivar ambas as funções: stty stop ''; stty start '';. Isso deixa Ctrl-S livre para o uso como o caractere de escape para screen, com isso em minha .screenrc: escape ^Ss. O que, por sua vez, significa que eu posso usar o readlineatalho padrão Ctrl-A para "início de linha" (combinado com Ctrl-E para "fim de linha" e menos frágil para a emulação de terminal que Home e End). : D
IMSoP 22/06

Respostas:

155

Muito antes de haver computadores, havia tele- impressoras (também conhecidas como teletypewriters, aka teletypes). Pense nelas como a mesma tecnologia de um telégrafo, mas com algum tipo de teclado e algum tipo de impressora conectada a eles.

Como os teletipos já existiam quando os computadores estavam sendo construídos pela primeira vez e como os computadores da época eram do tamanho de uma sala, os teletipos se tornaram uma interface de usuário conveniente para os primeiros computadores - digite um comando, pressione o botão Enviar, aguarde um pouco e o a saída do comando é impressa em uma folha de papel à sua frente.

O controle de fluxo de software se originou nessa época - se a impressora não pudesse imprimir tão rápido quanto o teletipo estava recebendo dados, por exemplo, o teletipo poderia enviar um comando de controle de fluxo XOFF ( Ctrl+ S) para o lado remoto dizendo "Pare de transmitir por enquanto" e, em seguida, poderia enviar o comando de controle de fluxo XON ( Ctrl+ Q) para o lado remoto dizendo "Atualizei-me, continue".

E esse uso sobrevive no Unix porque os emuladores de terminal modernos estão emulando terminais físicos (como o vt100 ) que eles mesmos estavam (de certa forma) emulando teletipos.

godlygeek
fonte
29
Provavelmente não "impresso em uma folha de papel", mas "impresso em uma pilha de papel dobrado em leque".
Dubu
3
Ou para um ROLO de fita perfurada!
Mdpc
2
Eu não acho que control-S e control-Q foram usados ​​inicialmente para iniciar e parar a saída de computadores, mas sim de leitores de fita de papel conectados a outros teletipos . Acho que não haveria muito interesse em conectar teletipos a computadores até o advento dos sistemas de compartilhamento de tempo. Caso contrário, sempre que um computador passa à espera de um usuário digitar algo, é tempo que ele não gasta fazendo algo útil.
Supercat
2
Ou para um rolo de papel de 8½ʹʹ.
Scott
44
Em 1987, fiz o último teletipo que havia sobrevivido na minha universidade pegar fogo. Usou-o como uma impressora serial e não percebeu que iria superaquecer se forçado a imprimir 35 páginas continuamente. O superaquecimento cheirava mal, mas o papel pegou fogo por causa do calor. Só então eles me disseram que eu deveria ter dado um Ctrl-S a cada 2 páginas para deixá-lo esfriar por alguns minutos.
Tonny
25

É um caractere de controle da época dos terminais VT100 e similares. Havia uma capacidade de rolagem limitada (se houver) nesses terminais para começar com o CTRL-S, permitindo congelar a saída para visualizar o que está atualmente na tela sem que ela seja baixada.

Quase tudo o que você vê nos terminais modernos foi criado para emular os sistemas de terminais mais antigos.

Livinglifeback
fonte
Foi isso que ouvi (em vez da resposta do teleprinter, embora seja possível (provavelmente até) que essa seja a razão pela qual essa funcionalidade foi preservada.) Eu usei o Cntr-S para esse fim, quando tenho problemas com mais ou menos
Lyndon Branca
2
A necessidade mecânica de iniciar / parar a produção veio antes que o humano precisasse lê-la!
TripeHound #
@TripeHound: De fato, demorou muito tempo para que houvesse qualquer expectativa em particular de que os humanos estivessem olhando para as informações enquanto elas eram recebidas (alguém que aguardava ansiosamente uma história poderia assistir como era recebido por um teletipo, mas os operadores geralmente tinham coisas melhores façam).
precisa
21

BTW, se você estiver listando uma saída longa na tela, é provável que você não leia necessariamente tão rápido quanto o computador que cuspe a saída. Usar CTRL-S / CTRL-Q em um gato (ou cauda ativa) é MUITO útil para parar e retomar a saída.

mdpc
fonte
25
lessé mais.
dotancohen
2
@dotancohen: Muito engraçado. Even morenão foi introduzido até quatro ou cinco anos após o lançamento do primeiro Unix (apresentando cat, mas nãocat -v ). Observe também que havia outros sistemas operacionais de compartilhamento de tempo (interativo) antes do Unix; por exemplo, RSTS .
Scott
2
@dotancohen eu prefiro less, mas as pessoas dizem que, enquanto lessé more, mostainda é mais do que less!
Volker Siegel
1
@VolkerSiegel: Obrigado por me apresentar most! Se você souber de um programa que permita ver um arquivo de imagem (gif, jpg, png) sobre ssh no CLI, eu adoraria ouvir sobre isso. Atualmente, uso asciiviewou img2txtnão é satisfatório.
dotancohen
2
@ VolkerSiegel: Também obrigado pela maioria ! Como o autor diz: "Por que se contentar com menos?". Usuários do Debian podem apt-get install most.
mivk
17

Em teletipos antigos com um leitor de fita de papel, o recebimento de um controle-Q ligava o leitor de fita de papel e começava a enviar caracteres da fita como se tivessem sido digitados no teclado. Control-S desligaria o leitor de fita de papel. Se considerarmos que os teletipos foram originalmente destinados a não imprimir dados de computadores, mas a partir de outros teletipos, deve ficar bem claro como "desligar o leitor de fita de papel" pode ser interpretado como análogo a "solicitar outra extremidade para interromper a transmissão".

Aliás, o controle-R ativaria o furador da fita de papel, de modo que todos os caracteres recebidos pelo teletipo (ou, se o eco local fosse ativado, digitado no teclado) também seriam perfurados na fita de papel; o controle-T desligaria o furador da fita de papel. Ao contrário das operações associadas ao controle-S e controle-Q, no entanto, essas operações parecem não ter um equivalente moderno.

Além disso, os nomes originais para control-Q / R / S / T eram DC1 / DC2 / DC3 / DC4 ("Device Control 1" etc.). Embora eu não tenha certeza do histórico, essa nomeação sugere que originalmente eles O objetivo era desencadear algum tipo de ação não especificado, mas a coisa mais comum que as pessoas faziam com o DC1 e o DC3 era controlar o leitor de fita de papel.

supercat
fonte