Man console_codes (4): escape de la consola Linux y secuencias de escape

La consola Linux tiene un gran conjunto de controles para terminales VT102 y ECMA-48/ISO 6429/ANSI X364, así como una serie de secuencias individuales para cambiar paleta de color, conversiones de juegos de caracteres, etc. Las tablas a continuación (segunda columna) indican el código mnemotécnico ECMA-48 o DEC (si este último está asignado a DEC) para esta función. Las secuencias sin un código mnemotécnico no pertenecen ni a ECMA-48 ni a VT102.

El primer proceso que se ejecuta después del trabajo. proceso normal para generar información y enviar un flujo de caracteres de la consola al conductor (para su Salida real), es la traducción de códigos utilizados durante el funcionamiento normal en códigos utilizados para imprimir.

Si la consola se ejecuta en modo UTF-8, los bytes entrantes se organizan primero en Unicode de 16 bits. De lo contrario, cada byte se convierte según la tabla de búsqueda actual (que convierte los datos a Unicode). Mira la sección Conjuntos de caracteres abajo).

Normalmente, los valores Unicode se convierten en un índice de fuente, que se almacena en la memoria de vídeo de manera que la imagen correspondiente (que se encuentra en la ROM del vídeo) aparece en la pantalla. Tenga en cuenta que trabajar con Unicode (y el hardware informático actual) solo permite utilizar 512 imágenes diferentes simultáneamente.

Si el valor Unicode actual es un carácter de control, o si actualmente se está procesando una secuencia de escape, el valor se tratará de manera diferente. En lugar de convertir el valor en una fuente y mostrarlo como una imagen, se realizará una acción específica (como mover el cursor) u otra función de control. Ver la sección a continuación Gestión de consola Linux.

Es incorrecto especificar explícitamente secuencias de hardware de control de terminal en los programas. Linux admite la base de funcionalidad del terminal información terminológica(5). En lugar de ingresar secuencias de escape manualmente, probablemente querrás usar una biblioteca que use terminfo u otras utilidades para hacer el trabajo, como maldiciones(3), poner(1) o reiniciar(1).

Gestión de consola Linux

Esta sección describe todos los personajes de control y secuencias de escape que realizan equipos especiales(es decir, cualquier cosa que no sea simplemente imprimir un carácter en la posición actual del cursor) Consola de Linux.

personajes de control

Un carácter se considera carácter de control si (antes de la conversión según la tabla de conversión) contiene uno de los 14 códigos: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b. (VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB), 1b (ESC), 7f (DEL). Puede configurar el modo "mostrar caracteres de control" (ver más abajo), en cuyo caso los caracteres 07, 09, 0b, 18, 1a, 7f se mostrarán en la pantalla como imágenes. Por otro lado, en el modo UTF-8, todos los códigos del 00 al 1f se tratan como caracteres de control, independientemente del modo "mostrar caracteres de control".

Si se encuentra un carácter de control, se tiene en cuenta inmediatamente y no tiene ningún efecto adicional (incluso si estaba en medio de la secuencia de escape), y la secuencia de control continúa desde el siguiente carácter. Sin embargo, el carácter ESC que inicia una nueva secuencia de escape probablemente cancelará una secuencia anterior incompleta, y los caracteres CAN y SUB definitivamente finalizarán cualquier secuencia de escape. Los caracteres de control reconocidos son: BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Realizan acciones estándar para ellos:

BEL(0x07, ^G) emite un pitido; BS(0x08, ^H) elimina el carácter anterior (se desplaza una columna a la izquierda, pero no más allá del principio de la línea); HT(0x09, ^yo) pasa a la siguiente tabulación o al final de la línea si no se han establecido tabulaciones antes; LF (0x0A, ^J), TV (0x0B, ^K) y FF (0x0C, ^L) establece un avance de línea y LF/NL (en modo de nueva línea) realiza un retorno de carro; CR(0x0D, ^M) especifica un retorno de carro; Entonces(0x0E, ^norte) activa el juego de caracteres G1; SI(0x0F, ^O) alimenta el conjunto de símbolos G0; PUEDE (0x18, ^X) y SUB (0x1A, ^Z) interrumpir la secuencia de detección; ESC (0x1B, ^[ ) comenzar la secuencia de detección; Se ignora DEL (0x7F); CSI (0x9B) es equivalente a ESC [.

Secuencias ESC pero no CSI.

CEScRISReiniciar.
ESCDINDIANATraducción de líneas.
ESC ENELNueva línea.
ESCHHTSEstablezca la tabulación en la columna actual.
ESCMRHODE ISLAND.Avance de línea inverso.
CES ZDECIDIRDefinición específica de DEC. El núcleo devuelve la cadena ESC [? 6 c, alegando que es VT102.
ESC 7DESCSCGuarde el estado actual (coordenadas del cursor, atributos, conjuntos de caracteres especificados por G0, G1).
ESC 8DECRCRestaura el último estado ESC 7 guardado.
ESC [CSIInicio de la secuencia de control
ESC %Iniciar una secuencia con una selección de conjunto de caracteres
ESC % @selección predeterminada (ISO 646/ISO 8859-1)
ESC %Gseleccione UTF-8
CES % 8seleccione UTF-8 (obsoleto)
ESC #8CALCOMANÍAPrueba de alineación de pantalla DEC: llena la pantalla con caracteres E.
ESC (Iniciar secuencia con selección de juego de caracteres G0
ESC (Bselección predeterminada (conversión ISO 8859-1)
ESC (0selección de grabación gráfica VT100
ESC (Usin recodificar --- directamente en la ROM de caracteres
ESC (Kgrabación de usuario --- mapa
cargado por utilidad mapascrn(8).
ESC)Iniciar secuencia con selección de juego de caracteres G1
(seguido de uno de los símbolos B, 0, U, K, como en G0).
ESC >DECPNMEstablecer el modo de entrada de números para el teclado adicional
ESC =DECPAMEstablecer modo de control para teclado adicional
ESC ]O.S.C.(Debe ser: comando Sistema operativo, OSC) ESC ]P nrrggbb: establece la paleta, el parámetro especifica 7 caracteres hexadecimales después de la última P:-(. Aquí norte establece el color (0-15), y en rrggbb Se indican los valores rojo/verde/azul (0-255). ESC ] R: Restablecer paleta

Secuencias ECMA-48 CSI

CSI (o ESC[) va seguido de una secuencia de parámetros, que son números decimales separados por punto y coma (el mayor es NPAR(16)). Un parámetro vacío o faltante es igual a cero. La secuencia de parámetros puede comenzar con un único signo de interrogación.

Sin embargo, después de CSI [ (o ESC [ [), se lee un solo carácter y se ignora el resto de la secuencia. (El objetivo de esto es no mostrar tecla de función).

El resultado de una secuencia CSI está determinado por su carácter final.

@ PCIInserte N caracteres vacíos.
ACUUUMueva el cursor hacia arriba N líneas.
BRUMIA
CCUF
DCACHORROMueva el cursor a las N columnas de la izquierda.
miCNLMueva el cursor hacia abajo N líneas hasta la columna 1.
FCPLMueva el cursor hacia arriba N líneas hasta la columna 1.
GRAMOCHA
hTAZAMover el cursor a la línea especificada y columna (comienza en 1,1).
jDEBorra la pantalla (por defecto desde el cursor hasta el final de la pantalla).
ESC [ 1 J: Borrar desde el inicio hasta el cursor.
ESC [ 2 J: borra toda la pantalla.
ESC [ 3 J: borra toda la pantalla, incluido el búfer
desplazamiento hacia atrás (desde Linux 3.0).
kELBorrar línea (predeterminado desde el cursor hasta el final de la línea).
ESC [ 1 K: borrar desde el principio de la línea hasta el cursor.
ESC [ 2 K: borra toda la línea.
lILLINOISInsertar N lineas vacias.
METROD.L.Eliminar N filas.
PAGDCHEliminar N caracteres en línea actual.
XECHBorra N caracteres en la línea actual.
aHPRMueva el cursor a las N columnas de la derecha.
CDARespuesta ESC [? 6c: “Soy el terminal VT102”.
dAVAMueva el cursor a la fila especificada de la columna actual.
miVPRMueva el cursor hacia abajo N líneas.
FVPHMueva el cursor a la fila y columna especificadas.
gramopor confirmarSin parámetro: borra la tabulación actual.
ESC [ 3 g: elimina todas las tabulaciones.
hSMModo de instalación (ver más abajo).
yoR.M.Modo de reinicio (ver más abajo).
metroSGRConfiguración de atributos (ver más abajo).
norteDSRInforme de estado (ver más abajo).
qDECLARARControl de indicadores en el teclado.
ESC [ 0 q: apaga todos los indicadores
ESC [ 1 q: habilitar Bloqueo de desplazamiento
ESC [ 2 q: habilitar Num lock
ESC [ 3 q: habilitar Bloq Mayús
rDECSTBMEstablecer área de desplazamiento; los parámetros serán las líneas superior e inferior.
s? Guardar la ubicación del cursor.
tu? Restaurar la ubicación del cursor.
` HPAMover el cursor a columna especificada línea actual.

Configuración de las opciones de gráficos ECMA-48

ECMA-48 SGR secuencia de caracteres de control ESC [ parámetros m establece los atributos de la pantalla. Se pueden especificar varios atributos en una secuencia. Un parámetro vacío (entre un punto y coma, una línea inicial o un carácter final) se trata como cero.

parámetroresultado
0 restablecer todos los atributos a sus valores predeterminados
1 poner en negrita
2 configurado en más brillante (simulado por color en la pantalla a color)
4 establecer subrayado (simulado por color en la pantalla a color) (los colores utilizados para simular el oscurecimiento o el subrayado se configuran usando ESC]...)
5 activar el parpadeo
7 habilitar la inversión de vídeo
10 restablecer la grabación seleccionada, el indicador de control de pantalla y alternar el metaindicador (en ECMA-48 especificado como "fuente principal").
11 seleccione recodificación nula, configure el indicador de control de pantalla, reinicie el interruptor de metamarca (en ECMA-48 se especifica como la "primera fuente alternativa").
12 seleccione recodificación nula, configure el indicador de control de pantalla, configure el interruptor de metamarca (en ECMA-48 se especifica como una "segunda fuente alternativa"). Cambiar el metamarcador hace que el bit más significativo del byte cambie antes de que se recodifica de acuerdo con la tabla de traducción.
21 habilitar la intensidad normal (en ECMA-48 se especifica como "doble subrayado")
22 enciende la intensidad normal
24 desactivar el subrayado
25 apagar el parpadeo
27 desactivar video invertido
30 establecer el color del carácter en negro
31 establecer el color del símbolo en rojo
32 establecer el color del símbolo en verde
33 instalar color marrón caracteres
34 instalar Color azul caracteres
35 establecer el color del símbolo en lila
36 establecer el color del símbolo en azul
37 instalar el color blanco caracteres
38 habilitar el subrayado, establecer el color de carácter predeterminado
39 desactivar el subrayado, establecer el color de carácter predeterminado
40 establecer el color de fondo en negro
41 establecer color de fondo rojo
42 establecer el color de fondo en verde
43 establecer el color de fondo en marrón
44 establecer el color de fondo en azul
45 establecer el color de fondo en lila
46 establecer el color de fondo en azul
47 establecer el color de fondo en blanco
49 establecer el color de fondo predeterminado

Interruptores de modo ECMA-48

ESC [ 3 h DECCRM (desactivado predeterminado): muestra caracteres de control. ESC [ 4 h DECIM (desactivado predeterminado): habilita el modo de inserción. ESC [20 h LF/NL (predeterminado desactivado): genera automáticamente el código CR después de LF, VT o FF.

Comandos de salida de estado ECMA-48

ESC [ 5 n Mensaje de estado del dispositivo (DSR): La respuesta es ESC [ 0 n (terminal OK). ESC [ 6 n Mensaje de posición del cursor (CPR): La respuesta es ESC [ y ; X R, donde x,y son las coordenadas del cursor.

Secuencias de modo especial DEC (DECSET/DECRST)

ESC [ ? 1 h DECCKM (desactivado predeterminado): cuando está habilitado, las teclas del cursor envían el prefijo ESC O en lugar de ESC [. ESC [ ? 3 h DECCOLM (predeterminado = 80 columnas): modo de cambio de número de 80/132 columnas. El código fuente del controlador indica que este comando por sí solo no es suficiente; algunas utilidades de usuario que utilizan modos no estándar, como cambiar tamaño(8), debe cambiar los registros de configuración de la tarjeta de video de la consola. ESC [ ? 5 h DECSCNM (desactivado predeterminado): habilita el modo de vídeo invertido. ESC [ ? 6 h DECOM (desactivado predeterminado): si está habilitado, las coordenadas del cursor se consideran relativas a la esquina superior izquierda del área de desplazamiento. ESC [ ? 7 h DECAWM (habilitado de forma predeterminada): habilita el modo de transferencia automática. En este modo, un carácter gráfico ingresado después de la columna 80 (o 132, si DECCOLM está habilitado) se mueve al principio de la siguiente línea. ESC [ ? 8 h DECARM (habilitado de forma predeterminada): habilita el modo de repetición automática al ingresar desde el teclado. ESC [ ? 9 h X10 Informe del estado del mouse (desactivado predeterminado): establezca el modo de informe del estado del mouse en 1 (o restablezca a 0), consulte a continuación. ESC [ ? 25 h DECTECM (habilitado por defecto): Hace visible el cursor. ESC [ ? 1000 h X11 Informe del estado del mouse (desactivado predeterminado): establezca el modo de informe del estado del mouse en 2 (o restablezca a 0), consulte a continuación.

Secuencias CSI específicas de la consola Linux

Las siguientes secuencias no son ECMA-48 ni VT102. Sólo están disponibles en el controlador de la consola de Linux. Colores en parámetros SGR: 0 = negro, 1 = rojo, 2 = verde, 3 = marrón, 4 = azul, 5 = lila, 6 = celeste, 7 = blanco.

ESC[1; norte ] Establecer color norte como color de subrayado
ESC[2; norte ] Establecer color norte a medida que el color se desvanece
ESC [8]Establezca el par de colores actual como atributos predeterminados.
ESC[9; norte ] Apague la pantalla después norte minutos.
ESC [ 10 ; norte ] Establecer frecuencia señal de sonido(en hercios).
ESC[11; norte ] Establezca la duración de la señal de sonido (en milisegundos).
ESC[12; norte ] Mueva la consola especificada delante de las demás.
ESC [13]Enciende la pantalla.
ESC[14; norte ] Configure el intervalo de apagado VESA (en minutos).
ESC [15]Mueve la consola anterior antes que las demás (desde Linux 2.6.0).
ESC[16; norte ] Establezca el intervalo de parpadeo del cursor en milisegundos (desde Linux 4.2)

Conjuntos de caracteres

El kernel tiene información sobre 4 tipos de traducción de bytes a caracteres de la consola de pantalla. Estas cuatro tablas son: a) Latin1 -> PC, b) Gráficos VT100 -> PC, c) PC -> PC, d) definida por el usuario.

Hay dos juegos de caracteres en el sistema, llamados G0 y G1, y uno de ellos es el juego de caracteres actual del sistema (originalmente G0). Ingresar ^norte hace que el conjunto G1 se vuelva actual, ^O hace que el conjunto G0 sea actual.

Estas variables G0 y G1 apuntan a la tabla de traducción y el usuario puede cambiarlas. Inicialmente señalan las tablas a) yb) respectivamente. Las secuencias ESC(B, ESC(0, ESC(U y ESC(K) hacen que G0 haga referencia a las tablas de traducción a), b), c) yd), respectivamente. Las secuencias ESC) B, ESC) 0, ESC) U y ESC) K hacen que G1 haga referencia a la tabla de traducción a), b), c) yd), respectivamente.

La secuencia ESC c reinicia el terminal, que es lo que le gustaría hacer cuando hay basura en la pantalla. La recomendación dada después de "echo ^V^O" solo hará que G0 sea el conjunto actual, pero no hay garantía de que G0 apunte a la tabla a). Algunas distribuciones tienen un programa. reiniciar(1), que simplemente ejecuta el comando “echo ^. El mapa de bits correspondiente a s se busca en la ROM de símbolos y se puede cambiar usando fuente(8).

Seguimiento del mouse

Para rastrear la actividad del mouse, se supone que el sistema debe emitir xterm(1) señales de estado del mouse compatibles. Debido a que el controlador de la consola no reconoce un dispositivo como un mouse (o un tipo similar), estas señales se envían al flujo de entrada de la consola solo cuando el controlador del terminal virtual recibe una señal ioctl para actualizar el estado del mouse. Estas señales ioctl deben ser generadas por aplicaciones de usuario habilitadas con mouse, como el servicio gpm(8).

Parámetro para todos los creados. xterm(1) las secuencias de escape (señales del mouse) serán de un carácter, cuyo código es igual a significado+040. Por ejemplo, "!" corresponde a uno. El informe del sistema de coordenadas de la pantalla comienza en 1.

En el modo de compatibilidad X10, al presionar un botón se envían secuencias de escape que codifican tanto la ubicación del mouse como la información sobre el botón presionado. El modo se activa cuando ESC [? 9 h y se apaga cuando ESC [ ? 9 litros. Cuando presionas el botón xterm(1) envía ESC [M bxy(6 caracteres), donde b es el botón 1 y xey son las coordenadas xey cuando se presiona el botón. Estos son los mismos códigos que genera y emite el kernel.

EN modo normal Las secuencias de escape de seguimiento del mouse (que no se implementaron en Linux 2.0.24) se envían cuando se presiona y suelta el botón del mouse. También se envía información sobre el modificador. El modo se activa cuando ESC [? 1000 h y se apaga cuando se emite ESC [ 1000 l. Cuando presionas o sueltas un botón xterm(1) emite ESC [ M bxy. Dos bits menos significativos b contienen información sobre los botones: 0=MB1 presionado, 1=MB2 presionado, 2=MB3 presionado, 3=soltado. Los bits más importantes contienen información sobre qué modificadores se presionaron cuando se presionó el botón. Esta información se agrega al presionar: 4=Shift, 8=Meta, 16=Control. De nuevo: X Y y son las coordenadas xey del mouse cuando se procesa el evento. Las coordenadas de la esquina superior izquierda se consideran como (1,1).

Comparación con otros terminales

Muchos otros tipos de terminales se describen, como la consola Linux, como compatibles con VT100. A continuación discutiremos las diferencias entre la consola Linux y los otros dos tipos principales: DEC VT102 y xterm(1).

Manejo de personajes de control

El tipo VT102 también reconoce los siguientes caracteres de control:

Se ignora NUL (0x00); ENQ (0x05) desencadena un mensaje de respuesta de devolución; DC1(0x11, ^Q, XON) reanuda la transmisión; DC3 (0x13, ^S, XOFF) hace que el VT100 ignore (y deje de transmitir) todos los códigos excepto XOFF y XON.

El procesamiento DC1/DC3 similar a VT100 se puede habilitar en el controlador del terminal.

ESC ] 0 ; TXT CALLEEstablecer el nombre del icono y el título de la ventana en TXT.
ESC ] 1 ; TXT CALLEEstablecer el nombre del icono para que sea igual TXT.
ESC ] 2 ; TXT CALLEEstablecer título de ventana en TXT.
ESC ] 4 ; número; TXT CALLEEstablecer color ANSI número igual TXT.
ESC ] 10 ; TXT CALLEEstablecer color de texto dinámico en TXT.
ESC ] 4 6 ; nombre CALLECambiar el archivo de registro a nombre(generalmente discapacitado
en opciones de compilación)
ESC ] 5 0 ; fn CALLEInstalar fuente fn.

Reconocido siguientes parámetros con un valor ligeramente modificado (el estado se conserva mejor, el comportamiento se acerca más al VT100/VT220):

ESC 7 DECSCGuardar cursor
ESC 8 DICIEMBRERestaurar cursor

También reconocido

También reconoce ESC% y proporciona una implementación UTF-8 más completa que la consola Linux.

secuencias CSI

versiones antiguas xterm(1), por ejemplo de X11R5, percibe el parpadeo de SGR como gordura de SGR. Las versiones más nuevas que implementan colores ANSI, como XFree86 3.1.2A de 1995, muestran el atributo de parpadeo en color. En las versiones modernas de xterm, el parpadeo de SGR se implementa como texto parpadeante, que también se puede convertir en color como alternativa a mostrar SGR. Las versiones originales de X11R6 no reconocían la configuración de color SGR hasta la versión X11R6.8, que incluía XFree86 xterm. También se entienden todas las secuencias ECMA-48 CSI CSI comprendidas por Linux. xterm, sin embargo en xterm(1) Hay varias secuencias de control ECMA-48 y DEC implementadas que Linux no comprende.

Programa xterm(1) reconoce todas las secuencias del modo especial DEC descritas anteriormente, pero ninguna de las secuencias del modo especial de Linux. Acerca de tus propios modos especiales xterm(1) se puede leer en el documento Secuencias de escape de Xterm, escrito por Edward Moy, Stephen Gildea y Thomas E. Dickey y disponible en la distribución X. Este documento, aunque abreviado, sigue siendo mucho más grande que esta página de manual. Resumen cronológico en

describe los cambios en xterm.

Programa vttest

demuestra muchas de estas secuencias de control. En la distribución original xterm(1) también contiene scripts de ejemplo que le enseñan cómo trabajar con otras propiedades.

NOTAS

La secuencia ESC 8 (DECRC) no puede restaurar el juego de caracteres modificado por ESC %.

DEFECTOS

En la versión 2.0.23, el conjunto de CSI es incorrecto e ineficaz; los NUL no se ignoran en las secuencias de escape.

Algunas versiones anteriores del kernel (posteriores a la 2.0) analizan secuencias de escape de 8 bits. Estos ("códigos de control C1") utilizan los códigos 128 a 159 para reemplazar ESC [, ESC] y secuencias de control iniciales similares de dos bytes. Existen parcialmente en núcleos modernos(o no están reconocidos o no funcionan debido al soporte UTF-8), no están completamente implementados y deben considerarse poco confiables.

Las secuencias de "modo especial" de Linux no respetan las reglas ECMA-48 para secuencias de escape en modo especial. En particular, terminan en ] y no utilizan el terminador estándar. Secuencia OSC (Establecer paleta) --- grande problema porque xterm(1) lo trata como una secuencia de escape que requiere un final de línea (ST). A diferencia de las secuencias fijador(1) que se ignorarán (ya que no son secuencias de escape válidas), la secuencia de paleta provocará un bloqueo xterm(1) (aunque presionar la tecla de retorno solucionará este problema). Para dar cabida a aplicaciones que tienen secuencias de escape de Linux codificadas, instale el recurso xterm(1) rotoLinuxOSC igual a verdadero.

EN versión antigua de este documento Se suponía que Linux reconocería la secuencia de escape ECMA-48 para la invisibilidad del texto. Ella es ignorada.

NOMBRE
console_codes - secuencias de control y ESC
consolas linux

DESCRIPCIÓN
La consola de Linux tiene un gran conjunto de herramientas de gestión.
Terminales VT102 y ECMA-48/ISO 6429/ANSI X3.64, así como
cierto número de secuencias privadas para
cambios en la paleta de colores, distribuciones de personajes
marcación, etc En las tablas siguientes (en el segundo
columna), se indica el código nemotécnico ECMA-48 o DEC
(si este último está asignado a DEC) de esta función.
Las secuencias sin un código mnemotécnico no pertenecen
ni a ECMA-48 ni a VT102.

El primer proceso que se ejecuta después del trabajo.
el proceso habitual de generar información y enviarla a
controlador de flujo de caracteres de la consola (para su real
salida), es la traducción de los códigos utilizados en condiciones normales.
trabajo, en códigos utilizados para imprimir.

Si la consola se ejecuta en modo UTF-8, los bytes entrantes
se organizan primero en Unicode de 16 bits. De lo contrario
cada byte se convierte según la tabla actual
distribución que convierte datos a Unicode. (Mirar
CONJUNTOS DE CARACTERES (sección siguiente).

Normalmente, los valores Unicode se convierten en un índice de fuente,
que se almacena en la memoria de vídeo de tal manera que
Aparece el glifo correspondiente (que se encuentra en la ROM del vídeo).
en la pantalla. Tenga en cuenta que trabajar con Unicode (y los actuales
hardware de computadora) le permite simultáneamente
Utilice sólo 512 glifos.

Si el valor Unicode actual es un carácter de control
o si en este momento procesada
Secuencia ESC, el valor será procesado
de manera especial. En lugar de convertir el valor
en la fuente y se muestra como un glifo, realizará
ciertas acciones (por ejemplo, mover el cursor) o
realizar cualquier otra función de gestión.
Consulte la sección ADMINISTRACIÓN DE LA CONSOLA LINUX a continuación.

Es incorrecto asignar estrictamente el control a los programas.
Terminal. Linux admite trabajar con la base de datos.
capacidades terminales. terminfo(5). Prefiriendo no
ingresar las secuencias de control ESC manualmente, usted
probablemente querrás usarlo para este trabajo
biblioteca de información de pantalla compatible con terminfo u otros
utilidades como: ncurses(3), tput(1) o reset(1).

GESTIÓN DE LA CONSOLA LINUX
Esta sección describe todos los personajes de control y
Secuencias ESC que realizan funciones especiales.
comandos (es decir, cualquier cosa que no sea una simple salida
carácter a la posición actual del cursor) en la consola Linux.

personajes de control
Un símbolo se considera un símbolo de control si (antes de la conversión
según la tabla de conversión) contiene uno de 14
códigos: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b
(VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a
(SUB), 1b (ESC), 7f (DEL). Puedes configurar el modo
`mostrar caracteres de control" (ver más abajo), mientras que
Los caracteres 07, 09, 0b, 18, 1a, 7f se mostrarán en la pantalla.
como glifos. Por otro lado, en modo UTF-8 todos los códigos son con 00
1f son tratados como personajes de control (independientemente
desde el modo `mostrar caracteres de control').
Si se encuentra un carácter de control, se inmediatamente
está indicado, pero no se tiene en cuenta de ninguna manera en el futuro (incluso
si estaba en medio de la secuencia ESC), y
la secuencia de control continúa desde el siguiente
símbolo. Sin embargo, el carácter ESC que inicia un nuevo control
la secuencia probablemente cancelará lo inacabado
la secuencia anterior, y los comandos CAN y SUB son exactamente
completará la secuencia de control. Reconocible
Los caracteres de control son: BEL, BS, HT, LF, VT, FF,
CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Ellos realizan
acciones estándar para ellos:

BEL(0x07, ^G) emite un pitido;

BS(0x08, ^H) elimina el carácter anterior (desplazado a la izquierda)
una columna, pero no más allá del principio
instrumentos de cuerda);

HT(0x09, ^I) pasa a la siguiente tabulación
o al final de la línea, si no había ninguna antes
se establecen tabulaciones;

LF (0x0A, ^J), VT (0x0B, ^K) y FF (0x0C, ^L) configurados
traducción de líneas;

CR (0x0D, ^M) especifica retorno de carro;

SO(0x0E, ^N) alimenta el juego de caracteres G1 y
si LF/NL (modo de nueva línea) está habilitado, entonces establece
un retorno de carro;

SI (0x0F, ^O) alimenta el juego de caracteres G0;

Interrupción CAN (0x18, ^X) y SUB (0x1A, ^Z)
secuencia ESC;

ESC (0x1B, ^[) comienza la secuencia ESC;

Se ignora DEL (0x7F);

CSI (0x9B) es equivalente a ESC [.

Secuencias ESC pero no CSI.
ESC con reinicio RIS.
ESC D IND Saltar línea.
ESC E NEL Nueva línea.
ESC H HTS Establece la tabulación en la columna actual.
ESC M RI Línea de retorno (salto hacia atrás).
ESC Z DECID Definición particular de DEC. Sistema
devuelve las líneas ESC [? 6 c, reclamando VT102.
ESC 7 DECSC Guardar el estado actual (coordenadas del cursor,
atributos, juegos de caracteres especificados por G0, G1).
ESC 8 DECRC Restaura el último estado ESC 7 guardado.
ESC [Entrada de secuencia de control CSI
ESC % Iniciar secuencia con selección de juego de caracteres
ESC % @ seleccione predeterminado (ISO 646 / ISO 8859-1)
ESC %G seleccione UTF-8
ESC %8 seleccione UTF-8 (obsoleto)
ESC #8 DECALN DEC Prueba de alineación de pantalla: Llena la pantalla con caracteres E.
ESC (Iniciar secuencia con selección de juego de caracteres G0
ESC (B seleccione predeterminado (distribución ISO 8859-1)
ESC (0 seleccionar distribución gráfica vt100
ESC (U selecciona asignación nula: directo a ROM de caracteres
ESC (K seleccionar distribución de usuario: descargable
utilidad mapscrn(8).
ESC) Iniciar secuencia con selección del juego de caracteres G1
(incluidos los símbolos: B, 0, U, K, - como en el ejemplo anterior).
ESC > DECPNM Usar teclado adicional como teclado numérico
ESC = DECPAM Usar teclado adicional como control
ESC ] OSC (Abreviatura de "comandos del sistema operativo")
ESC ] P nrrggbb: configura la paleta con parámetros,
especificado en 7 dígitos hexadecimales después de la última P:-(.
Aquí n es el color 0-16 y rrggbb indica
para usar rojo/verde/azul (0-255).
ESC ] R: Restablecer paleta

Secuencias ECMA-48 CSI
CSI (o ESC [) seguido de la secuencia
parámetros, que son números decimales separados
punto y coma (el más grande es NPAR(16)).
Un parámetro "vacío" (o su ausencia) equivale a
cero. La secuencia de parámetros puede comenzar
un signo de interrogación. Sin embargo, después de CSI [ (o ESC
[ [) lee un solo carácter y el resto
Se ignoran las secuencias. (El significado de esto es
para ignorar la tecla de función mostrada).
El resultado de especificar una secuencia CSI está determinado por su
personaje final.
@ICH Inserta N caracteres en blanco.
A CUU Mueve el cursor hacia arriba N filas.
B CUD Mueve el cursor hacia abajo N filas.
C CUF Mueve el cursor a las N columnas de la derecha.
D CUB Mueva el cursor a las N columnas de la izquierda.
E CNL Mueva el cursor hacia abajo N filas, hasta la columna #1.
F CPL Mueva el cursor hacia arriba N filas, a la columna #1.
G CHA Mueve el cursor a la columna especificada de la fila actual.
H COPA Mueva el cursor a la fila y columna especificadas (comience en 1,1).
J ED "Borrar" la pantalla (por defecto desde el cursor hasta el final de la pantalla).
ESC [ 1 J: "borrar" desde el principio de la columna hasta el cursor.
ESC [ 2 J: "borrar" toda la pantalla.
K EL "Borrar" la línea (por defecto desde el cursor hasta su final).
ESC [ 1 K: "borrar" desde el principio de la línea hasta el cursor.
ESC [ 2 K: "borrar" toda la línea.
L IL Insertar N líneas vacías.
M DL Eliminar N líneas.
P DCH Eliminar (con desplazamiento de línea) N caracteres en la línea actual.
X ECH "Borrar" (sin desplazamiento de línea) N caracteres en la línea actual.
a HPR Mueva el cursor a las N columnas de la derecha.
c DA Responder ESC [ ? 6c: `Soy VT102'.
d VPA Mueve el cursor a la fila especificada de la columna actual.
e VPR Mueva el cursor hacia abajo N filas.
f HVP Mueva el cursor a la fila y columna especificadas.
g TBC Sin parámetros: "borrar" la tabulación actual.
ESC [ 3 g: elimina todas las tabulaciones.
h Modo de instalación SM (ver más abajo).
l Modo de reinicio RM (ver más abajo).
m SGR Establecer atributos (ver más abajo).
n Informe de estado de DSR (ver más abajo).
q DECLL Establece los modos de funcionamiento de los indicadores del teclado.
ESC [ 0 q: apaga todos los indicadores
ESC [ 1 q: enciende el indicador "Bloqueo de desplazamiento"
ESC [ 2 q: enciende el indicador "Bloq Num"
ESC [ 3 q: enciende el indicador "Bloq Mayús"
r DECSTBM Establece el área de desplazamiento; los parámetros serán las filas superior e inferior.
¿s? Guardar la ubicación del cursor.
¿tú? Restaurar la ubicación del cursor.
` HPA Mueve el cursor a la columna especificada de la fila actual.

ECMA-48 Configuración de opciones de gráficos
ECMA-48 SGR secuencia de caracteres de control ESC [
m establece los atributos de la pantalla. Alguno
Los atributos se pueden especificar en una secuencia.

Parámetro. resultado
0 restablecer todos los atributos a sus valores predeterminados
1 instalación negrita
2 juegos más brillantes (color simulado en pantalla a color)
4 conjuntos de subrayado (simulado por color en una pantalla a color);
Se establecen los colores utilizados para simular el oscurecimiento o el resaltado.
usando ESC]...
5 enciende el parpadeo
7 habilitar el modo de video invertido
10 restablecer distribución seleccionada, banderas de control de pantalla
y cambiar la meta bandera
11 seleccione distribución nula, establezca el indicador de control de pantalla,
restablecer el interruptor de metamarca.
12 seleccione distribución nula, establezca el indicador de control de pantalla,
habilite el interruptor de metamarca. Cambiando la meta bandera
especifica la conmutación del bit más significativo en un byte
antes de su transformación según la tabla de distribución.
21 habilita el modo de intensidad normal (no compatible con ECMA-48)
22 apagar el modo de intensidad normal
24 desactivar el subrayado
25 apagar el parpadeo
27 desactivar video invertido
Juego de 30 caracteres de color negro.
31 conjuntos de color de caracteres rojo
32 instalar color verde caracteres
33 juegos de color de caracteres marrón
34 conjuntos de color de caracteres azul
35 juegos de personajes de color lila
36 conjuntos de color de caracteres azul
37 establecer el color del carácter en blanco
38 habilitar el subrayado, establecer el color de carácter predeterminado
39 desactivar el subrayado, establecer el color de carácter predeterminado
40 establecer el color de fondo en negro
41 establecer color de fondo rojo
42 establecer color de fondo verde
43 establecer el color de fondo en marrón
44 establecer color de fondo azul
45 establecer el color de fondo en lila
46 establecer color de fondo azul
47 establecer el color de fondo en blanco
49 establecer color de fondo predeterminado

Cambio de modo ECMA-48
CES [ 3 h
DECCRM (desactivado por defecto): Mostrar
personajes de control.

CES [ 4 horas
DECIM (desactivado por defecto): modo de configuración
inserciones/reemplazos.

CES [ 20 h
LF/NL (desactivado predeterminado): Automático
muestra el código CR después de los códigos: LF, VT o FF.

Comandos de informe de estado ECMA-48
ESC [ 5 norte
Mensaje de estado del dispositivo (DSR): Responder
es ESC [ 0 n (Terminal OK).

ESC [ 6 norte
Mensaje de posición del cursor (CPR): La respuesta es
ESC[y; x R, donde x,y son las coordenadas
cursor.

Secuencias DEC en modo privado (DECSET/DECRST)
No cubierto en ECMA-48. Se enumerarán los siguientes
secuencias de instalación de modos; en secuencia
Para restablecer los modos, el último carácter "h" se reemplaza por "l".

ESC [ ? 1 hora
DECCKM (deshabilitado por defecto): si está habilitado, entonces
Las teclas de cursor producen una señal que comienza con ESC.
Oh, no con ESC [.

ESC [ ? 3 horas
DECCOLM (predeterminado desactivado = 80 columnas):
modo para cambiar el número de columnas a 80 o
132.V versiones originales Se especifica que el conductor
este comando no es suficiente; alguno
utilidades de usuario que utilizan
modos no estándar, como resizecons(8),
debe cambiar los registros de configuración de la consola
tarjetas de video.

ESC [ ? 5 horas
DECSCNM (deshabilitado por defecto): Habilitar
Modo de vídeo invertido.

ESC [ ? 6 horas
DECOM (deshabilitado por defecto): si está habilitado, entonces
Las coordenadas del cursor se consideran relativas a
esquina superior izquierda en el área de desplazamiento.

ESC [ ? 7 horas
DECAWM (habilitado de forma predeterminada): modo habilitado
transferencia automática. En este modo, el símbolo gráfico
ingresado después de la columna #80 (o #132 si es DEC-
COLM habilitado), pasa al principio de la siguiente
líneas.

ESC [ ? 8 horas
DECARM (habilitado por defecto): Modo habilitado
caracteres de repetición automática al presionar una tecla
teclados.

ESC [ ? 9:00
Informe de estado del mouse X10 (predeterminado
ratones, igual a uno o cero (restablecer), ver más abajo.

ESC [ ? 25 horas
DECCM (habilitado de forma predeterminada): hacer cursor
visible.

ESC [ ? 1000 horas
Informe de estado del mouse X11 (predeterminado
off): Establecer el modo de informe de estado
mouse igual a 2 o cero (restablecer), ver más abajo.

Secuencias CSI privadas de la consola Linux
Las siguientes secuencias no son ECMA-48- ni
Secuencias VT102. Son "nativos" de
Controladores de consola Linux. Colores en parámetros SGR: 0 =
negro, 1=rojo, 2=verde, 3=marrón, 4=
azul, 5 = lila, 6 = azul claro, 7 = blanco.
ESC[1; n] Establecer color n como color de subrayado
ESC[2; n] Establecer el color n como color de desvanecimiento
ESC [ 8 ] Establece el par de colores actual con los atributos predeterminados.
ESC[9; n ] Configure la pantalla para que comience a “limpiar” después de n minutos.
ESC [ 10 ; n ] Establezca la frecuencia de la señal de sonido (en hercios).
ESC[11; n ] Establezca la duración de la señal de sonido en (milisegundos).
ESC[12; n ] Mueva la consola especificada delante de las demás.
ESC [ 13 ] Restaura la pantalla después de la "limpieza".
ESC[14; n ] Configure el intervalo de apagado VESA (en minutos).

CONJUNTOS DE CARACTERES
El kernel tiene información sobre 4 tipos de traducción de bytes.
Símbolos de la consola de pantalla. Estas cuatro tablas son
transformando: a) Latin1 -> PC, b) gráficos VT100 ->
PC, c) PC -> PC, d) definido por el usuario. en el sistema
generalmente hay dos conjuntos de caracteres llamados G0 y G1,
y uno de ellos es el sistema actual configurado (originalmente
este es G0). Al ingresar ^N, el conjunto G1 se vuelve actual, ^O
hace que el conjunto G0 sea actual. Las variables G0 y G1 indican
tablas de símbolos y pueden ser modificadas por el usuario.
Inicialmente señalan las tablas a) y b)
respectivamente. Secuencias ESC (B y ESC (0 y
ESC(U y ESC(K) hacen que G0 haga referencia a tablas
traducciones a), b), c) y d) respectivamente.
Secuencias ESC) B y ESC) 0 y ESC) U y ESC) K
hacer que G1 haga referencia a las tablas de traducción a), b), c) y
d) en consecuencia. La secuencia ESC c da como resultado
resetear el terminal, es decir, a lo que necesitas cuando
presencia de "basura" en la pantalla. Recomendación enumerada después
"echo ^V^O" sólo hará que G0 sea el conjunto actual, pero no
no hay garantía de que G0 apunte a la tabla a). EN
algunas versiones tienen un reinicio del programa(1), que sólo
solo ejecuta el comando "echo ^" bit a bit.
se busca la imagen correspondiente a s en la ROM de símbolos y
se puede cambiar usando setfont(8).

USANDO EL RATÓN
El sistema para rastrear la actividad del mouse implica emitir
Señales de estado del mouse compatibles con xterm. Desde el conductor
La consola no reconoce un dispositivo como un mouse (o sus
tipo), luego estas señales se envían al flujo de entrada
consola, sólo cuando el controlador de terminal virtual
recibe una señal ioctl para actualizar el estado del mouse. Estos
Las señales ioctls deben ser generadas por el usuario.
Aplicaciones habilitadas para mouse (como
demonio gpm(8)). Parámetro para todos los xterm creados
Secuencias ESC (señales de movimiento del ratón)
habrá un carácter cuyo código sea el valor+040. Por ejemplo,
`!" corresponde a uno. El sistema de coordenadas de la pantalla cuando
El seguimiento del mouse se basa en el signo de la unidad. EN
Modo de compatibilidad X10 al presionar botones
Se envían secuencias ESC en las que el
estado del mouse e información sobre el botón presionado. Modo
se ejecuta cuando ESC [? 9 h y se apaga a las
emitiendo ESC [? 9 litros. Cuando presionas un botón xterm envía
ESC [ M bxy (6 caracteres), donde b es el botón-1 y xey
igual a las coordenadas xey cuando se presiona este botón. Este
los mismos códigos que generan y generan el núcleo del sistema. EN
modo de seguimiento normal del ratón (que no estaba
implementado en Linux 2.0.24) Secuencias ESC
enviado cuando presiona y suelta un botón del mouse.
También se envía información sobre el modificador. Empieza
modo al emitir ESC [? 1000 h y se apaga al dispensar
ESC [1000l. Al presionar y soltar el botón xterm
emite ESC [ M bxy. Los dos bits inferiores de b contienen información.
acerca de los botones: 0=MB1 presionado, 1=MB2 presionado, 2=MB3 presionado,
3=liberado. Los bits más significativos contienen información sobre qué
Los modificadores se desactivaron cuando se presionó el botón. Este
La información se agrega cuando se presiona: 4=Shift, 8=Meta,
16=Controlar. Una vez más: xey son coordenadas xey
ratón al procesar el evento. Coordenadas superior izquierda
Los ángulos se consideran como (1,1).

COMPARACIÓN CON OTROS TERMINALES
Muchos otros tipos de terminales se describen como
Consolas Linux (como `compatibles con VT100'). A continuación discutiremos.
diferencia entre consola linux y otros dos importantes
tipos, DEC VT102 y xterm(1).

Manejo de personajes de control
El tipo vt102 también reconoce los siguientes caracteres de control:

Se ignoró NUL (0x00);

ENQ (0x05) se inició el mensaje de respuesta inversa;

DC1 (0x11, ^Q, XON) continúa la transmisión;

DC3 (0x13, ^S, XOFF) indica que se necesita vt100
ignorar y detener la transmisión de todos los códigos para
excluyendo XOFF y XON

Se puede iniciar el procesamiento DC1/DC3 similar al VT100
conductor tty.

El programa xterm (en modo vt100) reconoce el control
los siguientes símbolos: BEL, BS, HT, LF, VT, FF, CR, SO, SI,
ESC.

secuencias ESC
Secuencias de consola VT100 no implementadas en
Consolas Linux:

ESC N SS2 Cambio de 2. (Seleccione el juego de caracteres G2 sólo para el siguiente
personaje.)
ESC O SS3 Cambio en 3. (Seleccione el juego de caracteres G3 solo para el siguiente
personaje.)
ESC P DCS Línea de control del dispositivo (termina en ESC\)
ESC X SOS Inicio de línea.
ESC ^ PM Mensaje privado (termina en ESC\)
ESC\ST Terminando 0 líneas
ESC * ... Definir juego de caracteres G2
ESC +... Definir juego de caracteres G3
El programa xterm (en modo vt100) reconoce: ESC c, ESC #
8, ESC >, ESC =, ESC D, ESC E, ESC H, ESC M, ESC N, ESC O,
ESC P... ESC ESC Z (produce las secuencias ESC [
? 1; Respuesta 2c: `Soy vt100 con mejora
parámetros de vídeo") y ESC ^ ... ESC con los mismos valores,
los cuales se indican arriba. Aceptado: ESC (, ESC), ESC *,
ESC +,- seguido de 0, A, B para caracteres especiales
Modos DEC y dibujo lineal, UK y USASCII respectivamente.
ESC ] se aceptan para fijar el funcionamiento de dichos recursos,
Cómo:

ESC ] 0 ; txt BEL Establece el nombre del icono y el título de la ventana en modo txt.
ESC ] 1 ; txt BEL Establece el nombre del icono en modo txt.
ESC ] 2 ; txt BEL Establece el título de la ventana en modo txt.
ESC ] 4 6 ; nombre BEL Cambie el archivo de registro por nombre (normalmente deshabilitado)
opciones de compilación)
ESC ] 5 0 ; fn BEL Establecer fuente fn.
Los siguientes parámetros se reconocen con ligeras modificaciones.
significado:

ESC F Cursor a la esquina inferior izquierda de la pantalla (si está habilitado)
recurso hpLowerleftBugCompat)
ESC l Bloqueo de memoria (para terminales HP).
Bloquea la memoria encima del cursor.
ESC m Desbloquea la memoria (para terminales HP).
ESC n LS2 Introduzca el juego de caracteres G2.
ESC o LS3 Introduzca el juego de caracteres G3.
ESC | LS3R Introduzca el conjunto de caracteres G3 como GR.
ESC ) LS2R Introduzca el conjunto de caracteres G2 como GR.
No tiene ningún efecto visible en xterm.
ESC ~ LS1R Introduzca el carácter G1 configurado como GR.
No tiene ningún efecto visible en xterm.
ESC % no reconocido...

secuencias CSI
El programa xterm (según XFree86 3.1.2G) no reconoce
SGR en modo parpadeante o sigiloso. Las versiones X11R6 no son
reconocer la configuración de color SGR. Todos los demás ECMA-48
Las secuencias CSI reconocidas por Linux también son
son reconocidos por xterm y viceversa. El programa xterm
reconocer todas las secuencias del modo privado DEC,
enumerados anteriormente, pero no reconocerá ninguno de los
Secuencias en modo privado en Linux. Para
discusión de secuencias en modo privado para xterm
consulte el documento XtermControlSequences creado por
Edward Moy y Stephen Gildea y acompañados
Distribución del sistema X Window.

ERRORES ENCONTRADOS
En la versión 2.0.23, el conjunto de CSI es incorrecto y
no válido, NUL no se ignora internamente
Secuencias ESC.

Las operaciones son combinaciones especiales símbolos que especifican acciones para transformar varias cantidades. El compilador interpreta cada una de estas combinaciones como una unidad independiente llamada token.

La Tabla 2-3 proporciona una lista de operaciones. Las operaciones se deben utilizar exactamente como se presentan en la tabla, sin espacios en blanco entre caracteres en aquellas operaciones que están representadas por varios caracteres.

El tamaño de la operación no está incluido en esta tabla. Ella más bien representa palabra clave que un símbolo.

Operación

Nombre

NO lógico

complemento de bits

Suma

Resta, negación aritmética.

Multiplicación

Desplazamiento a la izquierda

Desplazamiento a la derecha

menor o igual

Más o igual

Bit a bit Y, dirección de

O inclusivo bit a bit

O exclusivo bit a bit

Y lógico

O lógico

Ejecución secuencial (coma)

Operación expresión condicional

Incremento

Decremento

tarea sencilla

Suma con asignación

Resta con tarea

Multiplicación con asignación

División con asignación

Resto con asignación

Desplazamiento a la derecha con asignación

Desplazamiento a la izquierda con asignación

Bit a bit Y con asignación

Bit a bit inclusivo O con asignación

O exclusivo bit a bit con asignación

Tabla 2‑3 Operaciones

Comentario: ¿Operador de expresión condicional?: es un operador ternario, no un operador de dos caracteres. El formato de expresión condicional es el siguiente: ?:

    1. Constantes

Una constante es un número, carácter o cadena de caracteres. Las constantes se utilizan en un programa como valores inmutables. En el lenguaje C, existen cuatro tipos de constantes: constantes enteras, constantes de punto flotante, constantes de caracteres y literales de cadena.

      1. Constantes enteras

Una constante entera es un número decimal, octal o hexadecimal que representa un valor entero. Una constante decimal tiene el siguiente formato:

Dónde es uno o más dígitos decimales del 0 al 9.

Una constante octal tiene el siguiente formato:

0,

Dónde es uno o más dígitos octales del 0 al 7. Es necesario registrar el cero inicial.

Una constante hexadecimal tiene uno de los siguientes formatos de representación:

0x

0X ,

Dónde uno o más dígitos hexadecimales.

Un dígito hexadecimal puede ser un número del 0 al 9 o una letra (mayúscula o minúscula) de la A a la F. Se permite una "mezcla" de letras mayúsculas y minúsculas en representación constante. Es necesario escribir un cero a la izquierda seguido de una x o una X.

No se permiten espacios en blanco entre los dígitos de una constante entera. La tabla 2-4 ilustra ejemplos de constantes enteras.

Tabla 2‑4 Ejemplos de constantes

Las constantes enteras siempre especifican valores positivos. Si se requieren valores negativos, entonces es necesario formar una expresión constante a partir del signo menos y la constante que le sigue. El signo menos se trata como una operación aritmética.

Cada constante entera se especifica mediante un tipo que determina su representación en memoria y su rango de valores. Las constantes decimales pueden ser de tipo int o long.

Las constantes octales y hexadecimales pueden ser de tipo int, unsigned int, long o unsigned long, según su tamaño. Si una constante se puede representar como un int, se especifica como tipo int. Si su valor es mayor que el valor positivo máximo que se puede representar mediante el tipo int, pero menor que el valor que se puede representar en el mismo número de bits que int, se especifica como int sin signo. Finalmente, a una constante cuyo valor es mayor que el valor máximo representado por un int sin signo se le asigna un tipo largo o sin signo, si es necesario. La Tabla 2-5 muestra los rangos de valores para las constantes octales y hexadecimales representadas por los tipos correspondientes en la máquina, donde tipo entero tiene una longitud de 16 bits.

rangos hexagonales

rangos octales

0x8000 – 0xFFFF

0100000 - 017777777777

0x80000000 - 0xFFFFFFFF

020000000000 - 030000000000

Tabla 2‑5 Rangos de valores para constantes octales y hexadecimales

La importancia de las reglas discutidas anteriormente es que las constantes octales y hexadecimales no contienen extensiones "firmadas" cuando se convierten a tipos más largos (para la conversión de tipos, consulte la Sección 5, "Expresiones y asignaciones").

El programador puede definir para cualquier constante entera. tipo largo, agregando la letra "l" o "L" al final de la constante. La tabla 2-6 muestra ejemplos de constantes enteras.

Constantes decimales

Constantes octales

Constantes hexadecimales

Tabla 2‑6 Ejemplos de constantes enteras largas

Las secuencias ESC son combinaciones de caracteres especiales que

presente caracteres de espacio en blanco y caracteres no gráficos en cadenas y símbolos

constantes.

Su uso típico asociado a la especificación de acciones tales como

retornos de carro y tabulaciones, y para especificar representaciones literales

caracteres, como la comilla doble ("). La secuencia de escape consta de

a partir de una barra invertida (\) seguida de una letra, signos

puntuación "comilla simple" (), " doble comillas" (""), "barra invertida

barra" (\) o una combinación de números.

Si una barra invertida precede a un carácter no incluido en este

lista, la barra invertida se ignora y el carácter se representa como

literal. Por ejemplo, la imagen "\c" representa el carácter "c" en el literal

constante de cadena o carácter.

Las secuencias "\ddd" y "\xdd" le permiten especificar cualquier carácter en ASCII

(Americano código estándar interfaz de información) como una secuencia

tres dígitos octales o dos dígitos hexadecimales. Por ejemplo, el carácter de espacio.

se puede especificar como \010 o \x08. El código ASCII cero se puede especificar como \0 o

\x0. La secuencia octal ESC puede utilizar de uno a

Tres dígitos octales. Por ejemplo, el carácter de espacio se puede especificar como \10. Exactamente

también en secuencia ESC hexadecimal se puede utilizar desde

uno a dos dígitos hexadecimales. Entonces, la secuencia hexadecimal

para el carácter de espacio se puede especificar como \x08 o \x8.

Cabe señalar que cuando se utiliza octal o hexadecimal

Secuencia ESC en líneas, luego debe especificar completamente todos los números

Secuencias ESC (tres dígitos para octal y dos dígitos para

secuencias ESC hexadecimales). De lo contrario, si el símbolo está directamente

seguir la secuencia ESC accidentalmente resultará ser octal o

dígito hexadecimal, se interpretará como parte

secuencias. Por ejemplo, la línea \x7Be11 cuando se imprima será

se parece a ell porque \x7B se interpretará como un carácter rizado izquierdo

soportes (). La cadena \x07Be11 sería la representación correcta del carácter campana con

seguido de la palabra Bell.

Las secuencias ESC le permiten enviar caracteres de control no gráficos

A dispositivos externos. Por ejemplo, la secuencia ESC \033 se utiliza a menudo

como primer carácter de los comandos de control de terminal e impresora. No gráfico

Los caracteres siempre deben representarse como secuencias ESC porque

Se evitará el uso directo de símbolos no gráficos en programas C.

tener un resultado impredecible.

El carácter de barra invertida (\) además de definir secuencias ESC

También se utiliza como carácter de continuación de línea en definiciones de preprocesador.

Si el personaje " nueva línea" sigue al carácter de barra invertida (\),

entonces la nueva línea se ignora y Proxima linea considerado como parte

línea anterior.


| 2 | | | |
  • desarrollo de linux
    • Tutorial

    Cuando printf es muy poco y ncurses es demasiado

    Cuando hay demasiados datos, no hay suficientes salida estándar printf en un programa de consola. Especialmente si hay muchos eventos diferentes y diferentes datos se convierten en una lista loca. Estos datos pueden provenir del controlador a través de UART y no es necesario pensar en algún tipo de programa GUI. También puede haber un script bash normal al que desee adjuntar algún tipo de interfaz pseudográfica.

    Diré de inmediato que al principio esto puede parecer como reinventar la rueda, porque hay una excelente biblioteca de ncurses. No menosprecio sus méritos en absoluto, pero a menudo sus capacidades son demasiado redundantes. Además, es poco portátil para los controladores y ciertamente es redundante allí. Pero usted mismo puede esbozar un par de macros y funciones para trabajar con pseudográficos.

    Formulación del problema

    Quienes han estado programando controladores suelen utilizar una consola como UART o UART en ruso para mostrar información durante la depuración. Anteriormente di una descripción. de esta interfaz en sus publicaciones en Habré. Con una cantidad suficientemente grande de información variada, resulta completamente imposible captarla. Resulta ser un registro de varias páginas, especialmente si hay datos continuos de algunos sensores analógicos, además es necesario monitorear el estado de los puertos, etc. Como resultado, la gente empieza a escribir sus propios controladores en el lado de la computadora y la solución se vuelve completamente imposible de transportar y, lo más importante, se pierde mucho tiempo. Pero, de hecho, puede colocar toda la información del controlador en una ventana de terminal y usarla cómodamente, sin escribir software de terceros. Como resultado, nuestra solución se vuelve portátil (se necesita cualquier terminal) y se ahorran muchas horas de programación en la depuración.

    Ejemplo metodológico

    Este ejemplo será más educativo y metodológico, pero puedes adaptarlo fácilmente a tus necesidades. dispositivo real en cualquier controlador. Además, por analogía, todo esto funcionará en bash, pyton, etc.

    Supongamos que tenemos un controlador donde los sensores de contacto están conectados a un puerto de 8 bits que puede aceptar estados ON y OFF, hay un sensor analógico de tres ejes y debemos mostrar su estado, además el controlador tiene hora, fecha y desea controlar la visualización de la hora correcta; y finalmente, puede ocurrir algún evento (por ejemplo, un corte de energía), donde debamos informar urgentemente al operador. Resumamos:

    • Estado de 8 pines del puerto (on/off)
    • Sensor de tres ejes (x, y, z): salida separada para cada eje
    • fecha y hora
    • Mensaje de error al operador
    Puede imaginarse inmediatamente que si dicha información se envía simplemente estúpidamente a través de UART, será basura ilegible. Pero se puede arreglar y todo debería verse así (boceto en un editor de texto):


    Copié los marcos estúpidamente de mc. Aquellos que quieran belleza pueden mirar qué marcos hay en Unicode. Los números en la parte superior están escritos específicamente para las coordenadas.

    Parece que la idea está clara, pero ¿cómo implementar esto en la terminal? ¡Aquí es donde comienza la verdadera magia! " ¡Y ahora definitivamente debes volar! ¡Si no soplas, no sucederá ningún milagro!" Hmayak Akobyan

    Secuencias de escape

    Inicialmente, planeé presentar una conferencia sobre control de terminales usando secuencias ESC en este capítulo. Pero entonces el artículo simplemente crecería hasta alcanzar proporciones indecentes, por lo que daré solo algunos conceptos y el resto se puede encontrar en Internet o en manuales.
    Un terminal es un dispositivo de entrada/salida que permite ingresar y mostrar datos. Anteriormente, el terminal era un monitor y un teclado conectados a través de un puerto COM a una computadora, pero en tiempos más recientes versiones anteriores Incluso un teletipo.


    Teletipo Modelo 33 (imagen de Wikipedia)

    Hoy en día, una terminal es un programa que puede ser una terminal virtual, como en Linux, o una terminal que funciona con un puerto COM. Todos estos terminales, incluso el clásico HyperTerminal, cumplen con ciertos estándares. Como se puede imaginar, estos terminales deben gestionarse. Los hay regulares caracteres ASCII, que se muestran en la pantalla, y hay secuencias especiales de caracteres que le permiten configurar las coordenadas del cursor, borrar la pantalla, configurar el color, etc. En mis artículos sobre Habré y Giktimes ya he tocado repetidamente el tema de las secuencias ESC. Los usamos en el control de visualización (descripción en un spoiler que nadie leyó) y en un artículo sobre que también está controlado por secuencias ESC.

    Si alguno de ustedes estuvo en la época de BBS, entonces recordará lo “hermosos” que eran estos tableros: de colores, que tenían ciertos campos para entrada/salida de información, etc. Toda esta alegría se mostró con la ayuda de dichos Símbolos de Control. Un carácter se considera carácter de control si (antes de la conversión según la tabla de conversión) contiene uno de los 14 códigos: 00 (NUL), 0x07 (BEL), 0x08 (BS), 0x09 (HT), 0x0a (LF), 0x0b. (VT), 0x0c (FF), 0x0d (CR), 0x0e (SO), 0x0f (SI), 0x18 (CAN), 0x1a (SUB), 0x1b (ESC), 0x7f (DEL). Nos interesa principalmente el símbolo ESC=0x1b, "\033" o "\e". Puede leer más sobre estas secuencias en los manuales de man console_codes o en Internet en ruso.

    Además de controlar el cursor, también puedes colorear el terminal en Colores diferentes(si es de color, claro). Puedes comprobar los colores de tu terminal con un sencillo script BASH:

    Para fgbg en 38 48 ; haga #Foreground/Background para el color en (0..256); do #Colors #Muestra el color echo -en "\e[$(fgbg);5;$(color)m $(color)\t\e ; luego echo #Nueva línea fi hecha echo #Nueva línea hecha salida 0
    El resultado de la ejecución será algo como esto:


    Puede leer con más detalle sobre los colores y fuentes en la consola (y en cualquier terminal) con ejemplos.

    Ahora ya lo tienes Información necesaria para hacer huevos de Pascua divertidos en scripts BASH, como la imagen en el título de la publicación.


    Puedes leer con más detalle cómo hice un huevo de Pascua en bash en mi LiveJournal.

    Formatearemos todo en si.

    Doy este ejemplo en mis clases magistrales de programación y lo daré aquí. Hagamos macros para configurar atributos de texto, limpiar la pantalla, mover el cursor a esquina superior y moviendo el cursor a una posición determinada:

    #definir inicio() printf(ESC ")

    
    Arriba