Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

239
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!