Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

236
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda