Pregunta ¿Confusión acerca de los modos terminales crudos vs. cocidos?


Actualmente tengo un chat client que se comunica con éxito con a server. Se supone que debo modificar el comportamiento para que el aviso se mueve hacia abajo cuando se recibe otro mensaje de chat (es decir, los mensajes se imprimen "arriba" del aviso imprimiendo \b para borrar el mensaje, imprimir el mensaje y luego volver a imprimir el mensaje).

Nos dieron un test client y test server para probar esta funcionalidad, y actualmente, cuando el usuario tiene un aviso pero no ha ingresado nada, pueden recibir mensajes de otros usuarios. Cuando comienzan a escribir, el búfer no se vacía hasta que escriben todo su mensaje y presionan ENTER.

Se supone que debo replicar este comportamiento, pero Estoy muy confundido acerca de lo que realmente es el modo en bruto. 

¿Alguien puede decirme cómo controlar la entrada / salida a través del modo raw, o por qué el comportamiento de los programas de prueba que describí anteriormente ocurre desde el modo raw?


5
2017-10-27 21:44


origen


Respuestas:


De forma predeterminada, los controladores tty (es decir, la consola) de estilo Unix tomarán la entrada en "modo cocido". En este modo, proporciona una cierta cantidad de edición de línea de comandos. El usuario puede escribir una línea de entrada, posiblemente borrando y volviendo a escribir parte de ella (pero eso no siempre funciona) y el programa no la verá hasta que el usuario acceda a ingresar.

Probablemente esto se remonta a los días de los terminales de hardware conectados a la computadora a través de una línea serie; si el terminal maneja parte de la edición de bajo nivel, la computadora no tiene que hacerlo. También le da a los programas triviales de C una edición básica de entradas gratis.

A diferencia de, modo raw configura el controlador TTY para pasar cada carácter al programa a medida que se escribe. Los programas (en los sistemas operativos Unixish) se inician en modo cocinado por defecto y necesitan habilitar el modo sin procesar.

Cómo hacer esto solía variar enormemente entre sistemas operativos, aunque POSIX ha estandarizado estas cosas en estos días. En Linux, puede leer las páginas del manual "termios" y "tty_ioctl" para la documentación. Básicamente, obtienes una estructura de datos que contiene las configuraciones tty, modificas las partes que te interesan (específicamente, habilitando el modo raw) y luego las vuelves a pasar.

Otra posibilidad es usar la biblioteca ncurses. Se abstrae de todas esas cosas para ti.


10
2017-10-27 22:05



En modo sin procesar, los caracteres se pasan directamente a su programa. Por ejemplo, cuando escribe en un terminal en modo cocinado, los caracteres que escribe se repiten al instante en la pantalla. En modo raw, el terminal ignora los caracteres (es decir, no se repiten) y su programa tiene el opción de si o no repetirlo.

EDITAR: Wikipedia tiene un buen artículo sobre el modo cocido. http://en.wikipedia.com/wiki/Cooked_Mode Además, tenga en cuenta que en modo raw, los caracteres pares y similares se entregan directamente a su programa.


3
2017-10-27 22:04