Pregunta

Estoy estudiando para un examen y estoy confundido en cuanto a cómo canónica vsno canónica de entrada/salida funciona en Unix (por ejemplo, insultos).Yo entiendo que no es un buffer para que "disciplinas de línea" se aplican para canónica de entrada.Esto significa que el buffer se omite para no canónica de entrada, o no, simplemente significa que no hay una línea de disciplinas se aplican?¿Cómo funciona este proceso son diferentes para la entrada y salida de las operaciones?

En las maldiciones de los programas que he trabajado que demostrar canónica de entrada, la entrada escrito por un usuario se introduce automáticamente después de un cierto número de caracteres que se han escrito o una cierta cantidad de tiempo ha pasado.Son de estas cosas que considera "disciplinas de línea" o se trata de algo completamente distinto?

¿Fue útil?

Solución

Para canónica de entrada — creo shell;en realidad, creo que a la vieja usanza Bourne shell, ya que Bash y parientes de la línea de comandos de edición.Escribe una línea de entrada;si usted comete un error, utilice el carácter de borrar (el valor predeterminado es La tecla de retroceso, por lo general,a veces Eliminar para borrar el carácter anterior.Si te equivocas completamente, usted puede cancelar la totalidad de la línea con la línea de matar personaje (no completamente estandarizada, a menudo Control-X).En algunos sistemas, se obtiene una palabra borrar con Control-W.Todo esto es canónica de entrada.Toda la línea está reunido y editado hasta el final de la línea de caracteres Volver — es presionado.Acto seguido, toda la línea está disponible a la espera de los programas.Dependiendo de la read() las llamadas al sistema que están pendientes, toda la línea estará disponible para ser leído (por una o más llamadas a read()).

Para los no-canónica de entrada — pensar vi o vim o lo que sea — pulse un carácter, y que está disponible de inmediato para el programa.Usted no se levantó hasta que se pulse la tecla de retorno.El sistema no realiza la edición de los personajes;ellos están disponibles para el programa tan pronto como se escriben.Es el programa de interpretar las cosas de forma adecuada.Ahora, vim hace un número de cosas que se ven un poco como canónica de entrada.Por ejemplo, la tecla de retroceso se mueve hacia atrás, y en el modo de entrada se borra lo que había allí.Pero eso es porque vim elige para hacer que se comporte así.

No-canónica de salida es mucho menos grave de negocios.Hay un par de partes y piezas de diferencia, relacionadas con las cosas como si el eco de retorno de carro antes de la línea de alimentación, y si se debe hacer retrasos (no es necesario con la electrónica;importante en los días cuando el dispositivo de salida que podría haber sido un 110 baudios teletipo).También puede hacer cosas como manejar insensible a mayúsculas-dispositivos de salida — máquinas de escribir, de nuevo.Las letras minúsculas son de salida en mayúsculas y mayúsculas como barra diagonal inversa y tapas.

Solía ser que si que ha escrito todas las letras mayúsculas a la petición de inicio de sesión, entonces el programa de inicio de sesión convertiría automáticamente para el modo en el que todas las tapas eran de salida con una barra invertida delante de real de cada capital.Me imagino que esto ya no se hace en terminales electrónicos.


En un comentario, TitaniumDecoy preguntó:

Así que con la no canónica de entrada, es el búfer de entrada de bypass completamente?Además, ¿dónde disciplinas de línea vendrá?

Con la no canónica de entrada, el búfer de entrada todavía se utiliza;si no hay un programa con un read() llamada en espera para la entrada de la terminal, los personajes se mantienen en el búfer de entrada.Lo que no pasa es la modificación de la memoria de entrada.

Disciplinas de línea son cosas como el conjunto de manipulaciones que la entrada de la edición no.Así, un aspecto de la línea de la disciplina es que el carácter de borrar borra un carácter previo canónica modo de entrada.Si usted tiene icase (entrada de caso-mapping) establecer, a continuación, en mayúsculas los caracteres se asignan a minúsculas a menos precedido por una barra invertida;que es una disciplina de línea, creo, o un aspecto de una disciplina de línea.


Se me olvidó mencionar que EF (procesamientoControl-D) que se maneja en modo canónico;en realidad quiere decir 'hacer el acumulado de entrada disponibles para read()';si no hay ningún acumulado de entrada (si tipo de Control-D al principio de una línea), entonces el read() devolverá cero bytes, que luego es interpretado como la EF por los programas.Por supuesto, usted puede alegremente escribir más caracteres en el teclado después de que, en los programas que ignorar EF (o en ejecución en la no-canónica modo) va a ser muy feliz.

Por supuesto, en modo canónico, los caracteres que se escriben en el teclado son normalmente eco en la pantalla;puede controlar si que eco se produce.Sin embargo, esto es algo tangencial a la canónica de entrada;la edición normal se produce incluso cuando echo está apagado.

Del mismo modo, la interrupción y dejar de señales son artefactos de modo canónico de procesamiento.También lo son el trabajo de control de señales, tales como Control-Z para suspender el proceso actual y volver a la shell.Asimismo, el control de flujo (Control-S, Control-P para iniciar y detener la salida) es proporcionada por el modo canónico.

El capítulo 4 de Rochkind del Avanzados de Programación en Unix, 2da Ed cubre terminal de e/S y da mucho de esta información y mucho más.Otros UNIX programación de los libros (al menos los buenos) también cubre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top