Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

186
Visualizações
Cómo leer Ctrl+C como entrada

(en Linux )

Todos los métodos que encontré usan signal .

¿No hay otra manera? ¿Hay algo que pueda hacer para que el terminal lo coloque en el búfer de entrada?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Para "leer CTL+C como entrada" en lugar de generar un SIGINT , es necesario usar tcsetattr () para borrar cc_c[VINTR] o borrar el indicador ISIG como se describe en la página del manual a la que me vinculé, aquí .

Deberá usar tcgetattr , primero, para leer la configuración actual del terminal, ajustarla en consecuencia, luego tcsetattr para configurarla.

Debe asegurarse de que la configuración del terminal se restablezca a sus valores predeterminados originales cuando finalice su programa, no es seguro que el shell los restablezca a sus valores predeterminados, por usted.

over 4 years ago · Santiago Trujillo Relatório

0

No, signal() no es el camino. Debe configurar el controlador tty para realizar una entrada sin procesar (sin procesamiento de caracteres de entrada en el controlador), de modo que pase todos los caracteres intactos. Pero esto requiere considerar el dispositivo de entrada tty como especial y escribir un código especial para tratar ese caso (esto requiere que emita varias llamadas al sistema ioctl ). Pero esto no se recomienda, por las razones que se explican a continuación.

En segundo lugar, hay otra forma más simple que no requiere usar el modo sin formato. Puede escapar del carácter Ctrl-C anteponiendo el carácter de escape tty . En el sistema Linux y BSD, esto normalmente está vinculado al carácter Ctrl-V, por lo que presionar Ctrl-V + Ctrl-C le permite ingresar un solo carácter Ctrl-C. Lo acabo de comprobar con el comando hd :

 $ hd ^C 00000000 : 03 0a : .. 00000002 $ _

La siguiente pregunta es, entonces, ¿cómo ingresar un Ctrl-V? bueno, ¡solo duplícalo! (pero estamos fuera del alcance ahora, solo continúa leyendo)

La ventaja de este enfoque es que no requiere programación en su programa y funcionará de la misma manera cuando lea desde un archivo, tubería, fifo, socket, etc. (para lo cual Ctrl-C no tiene un significado especial, ya que tty el controlador está fuera de escena) El único dispositivo que genera una interrupción al detectar Ctrl-C es el controlador tty (más exactamente, el controlador tty , en su parte genérica de código, por lo que todos los tty hacen esto) y también tiene un carácter de escape (por la misma razón, todos los tty lo tienen) para invalidar el significado especial del siguiente carácter.

Puede verificar qué carácter es el carácter de escape con el stty(1) , configurado como la lnext entrada. Pero casi puedo asegurarte que será Ctrl-V.

Nota

Esto también se aplica a cualquier otro carácter especial (como Ctrl-D, Ctrl-H, etc. que la terminal usa para propósitos especiales)

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda