Guía Linux de Programación (GULP)
Sven Goldt
Sven van der Meer
Scott Burkett
Matt Welsh
Versión 0.4
Marzo 1995
0...Nuestro objetivo permanente: mejorar nuestro conocimiento de C, explorar
extraños comandos Unix y to boldly code where no one has man page 4.
2
Índice General
1 El sistema operativo Linux
2 El núcleo de Linux
3 El paquete libc de Linux
4 Llamadas al sistema
5 Una llamada multiuso: “ioctl”
6 Comunicación entre procesos en Linux
6.1
Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Pipes UNIX Semi-dúplex . . . . . . . . . . . . . . . . . . . .
6.2.1 Conceptos básicos
. . . . . . . . . . . . . . . . . . . .
6.2.2 Creación de tuberías en C . . . . . . . . . . . . . . . .
6.2.3 Tuberías, la forma fácil de hacerlo . . . . . . . . . . .
6.2.4 Operaciones atómicas con tuberías . . . . . . . . . . .
6.2.5 Notas acerca de las tuberías semi-dúplex:
. . . . . . .
6.3 Tuberías con Nombre (FIFO - First In First Out) . . . . . . .
6.3.1 Conceptos básicos
. . . . . . . . . . . . . . . . . . . .
6.3.2 Creación de una FIFO . . . . . . . . . . . . . . . . . .
6.3.3 Operaciones con FIFOs
. . . . . . . . . . . . . . . . .
6.3.4 Acciones Bloqueantes en una FIFO . . . . . . . . . . .
6.3.5 La Infame Señal SIGPIPE . . . . . . . . . . . . . . . .
IPC en Sistema V . . . . . . . . . . . . . . . . . . . . . . . .
6.4.1 Conceptos fundamentales
. . . . . . . . . . . . . . . .
6.4.2 Colas de Mensajes . . . . . . . . . . . . . . . . . . . .
6.4.3
Semáforos . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.4 Memoria Compartida . . . . . . . . . . . . . . . . . .
6.4
7 Programación del Sonido
7.1 Programación del altavoz interno . . . . . . . . . . . . . . . .
7.2 Programación de una Tarjeta de sonido . . . . . . . . . . . .
3
9
11
13
15
17
19
19
19
19
21
27
31
32
32
32
32
34
36
36
36
36
39
57
77
87
87
88
4
ÍNDICE GENERAL
8 Gráficos en modo carácter
8.8 Opciones
8.1 Funciones E/S en la libc . . . . . . . . . . . . . . . . . . . . .
8.1.1
Salida con Formato . . . . . . . . . . . . . . . . . . . .
8.1.2 Entrada con Formato . . . . . . . . . . . . . . . . . .
8.2 La Librería Termcap . . . . . . . . . . . . . . . . . . . . . . .
8.2.1
Introducción . . . . . . . . . . . . . . . . . . . . . . .
8.2.2 Encontrar la descripción del terminal . . . . . . . . . .
8.2.3 Lectura de una descripción de terminal
. . . . . . . .
8.2.4 Capacidades de Termcap . . . . . . . . . . . . . . . .
89
90
90
92
94
94
94
95
96
8.3 Ncurses - Introducción . . . . . . . . . . . . . . . . . . . . . . 101
8.4
Inicialización . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.5 Ventanas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.6 Salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.6.1
Salida con Formato . . . . . . . . . . . . . . . . . . . . 109
8.6.2
Inserción de Caracteres/Líneas . . . . . . . . . . . . . 109
8.6.3 Borrado de Caracteres/Líneas . . . . . . . . . . . . . . 110
8.6.4 Cajas y Líneas
. . . . . . . . . . . . . . . . . . . . . . 110
8.6.5 Carácter de Fondo . . . . . . . . . . . . . . . . . . . . 112
8.7 Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.7.1 Entrada con Formato . . . . . . . . . . . . . . . . . . 113
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
8.8.1 Opciones en la entrada . . . . . . . . . . . . . . . . . . 114
8.8.2 Atributos de la terminal . . . . . . . . . . . . . . . . . 116
8.8.3
¿Cómo se usa? . . . . . . . . . . . . . . . . . . . . . . 117
¿Cómo borrar ventanas y líneas? . . . . . . . . . . . . . . . . 119
8.9
8.10 Actualización de la imagen an la terminal
. . . . . . . . . . . 120
8.11 Atributos de vídeo y colores . . . . . . . . . . . . . . . . . . . 122
8.12 Coordenadas del cursor y de las ventanas
. . . . . . . . . . . 126
8.13 Moviéndonos por allí . . . . . . . . . . . . . . . . . . . . . . . 127
8.14 Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.15 Soft-labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.16 Miscelánea
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
8.17 Acceso de Bajo Nivél . . . . . . . . . . . . . . . . . . . . . . . 131
8.18 Volcado de Pantalla . . . . . . . . . . . . . . . . . . . . . . . 131
8.19 Emulación Termcap . . . . . . . . . . . . . . . . . . . . . . . 131
8.20 Funciones Terminfo . . . . . . . . . . . . . . . . . . . . . . . . 132
8.21 Funciones de Depurado
. . . . . . . . . . . . . . . . . . . . . 133
8.22 Atributos Terminfo . . . . . . . . . . . . . . . . . . . . . . . . 133
8.22.1 Atributos Lógicos . . . . . . . . . . . . . . . . . . . . . 133
8.22.2 Números . . . . . . . . . . . . . . . . . . . . . . . . . . 134
8.22.3 Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . 135
. . . . . . . . . . . . 143
8.23 Esquema de las Funciones de [N]Curses
ÍNDICE GENERAL
5
9 Programación de los Puertos de E/S
147
9.1 Programación del Ratón . . . . . . . . . . . . . . . . . . . . . 149
9.2 Programación del Módem . . . . . . . . . . . . . . . . . . . . 150
9.3 Programación de la Impresora . . . . . . . . . . . . . . . . . . 150
9.4 Programación del Joystick . . . . . . . . . . . . . . . . . . . . 150
10 Conversión de Aplicaciones a Linux
151
10.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.2 Gestión de Señales . . . . . . . . . . . . . . . . . . . . . . . . 152
10.2.1 Señales en SVR4, BSD, y POSIX.1 . . . . . . . . . . . 152
10.2.2 Opciones de Señales en Linux . . . . . . . . . . . . . . 153
10.2.3 signal en Linux . . . . . . . . . . . . . . . . . . . . . . 154
10.2.4 Señales soportadas por Linux . . . . . . . . . . . . . . 154
. . . . . . . . . . . . . . . . . . . . . . . . . 154
. . . . . . . . . . . . . . . 155
10.4.1 Rutinas kvm . . . . . . . . . . . . . . . . . . . . . . . 156
10.4.2 ptrace y el sistema de ficheros /proc
. . . . . . . . . . 156
10.4.3 Control de Procesos en Linux . . . . . . . . . . . . . . 156
. . . . . . . . . . . . . . . 157
10.5 Compilación Condicional Portable
10.6 Comentarios Adicionales . . . . . . . . . . . . . . . . . . . . . 159
10.3 E/S de Terminal
10.4 Control e Información de Procesos
11 Llamadas al sistema en orden alfabético
12 Abreviaturas
161
167
• Copyright
capítulo
8
es
1995 de Sven van der Meer
La Guía Linux de Programación es c 1994, 1995 de Sven Goldt
Sven Goldt, Sachsendamm 47b, 10829 Berlín, Alemania
<
[email protected] − berlin.de > .
c 1994,
El
<
[email protected] − berlin.de > .
El capítulo 6 es c 1995 de Scott Burkett < scottb@IntN et.net > .
El
[email protected] > .
Tenemos que dar especialmente las gracias a John D. Harper
<
[email protected] > por revisar en profundidad esta guía.
Se concede permiso para reproducir este documento, en todo o en
parte, bajo las siguientes condiciones:
de Matt Welsh <
c 1994,
1995
capítulo
10
es
1. Esta nota de Copyright debe incluirse sin modificaciones.
2. Comparta con los autores cualquier ganancia que obtenga.
3. Los autores no se hacen responsables de cualquier daño producido
en aplicación de los contenidos de este libro.
• Copyright (nota original)
The Linux Programmer’s Guide is c 1994, 1995 by Sven Goldt
Sven Goldt, Sachsendamm 47b, 10829 Berlin, Germany
<
[email protected] − berlin.de > .
Chapter 8 is c 1994, 1995 by Sven van der Meer <
[email protected] −
berlin.de > .
Chapter 6 is c 1995 Scott Burkett < scottb@IntN et.net > .
Chapter 10 is c 1994, 1995 Matt Welsh <
[email protected] > .
Special thanks goes to John D. Harper <
[email protected] > for
proofreading this guide.
Permission to reproduce this document in whole or in part is subject
to the following conditions:
1. The copyright notice remains intact and is included.
2. If you make money with it the authors want a share.
3. The authors are not responsible for any harm that might arise by
the use of it.
• Notas sobre la versión castellana
Esta guía, como cuarto trabajo importante del Proyecto LuCAS, obe-
dece a la demanda de guías de programación para Unix/Linux que ve-
nimos observando desde tiempos recientes. Sin embargo, lamentamos
que nuestra traducción sea tan incompleta como la versión original en
Inglés: ciertamente nos gustaría completarla, sin embargo no hemos
6
ÍNDICE GENERAL
7
podido recibir los permisos necesarios para ello de algunos de sus au-
tores originales, al estar actualmente ilocalizables. El proyecto LuCAS
agradece el trabajo de traducción realizado inicialmente por Pedro Pa-
blo Fábrega1, que abarca buena parte del libro. Además, agradecemos
la colaboración prestada por Ignacio Arenaza, César Ballardini y Luis
Francisco González2, quienes se han ocupado de la traducción del resto
del libro.
Nota: Versión de la traducción: 0.11 alpha
Juan José Amor3, Mayo de 1998.
• Prólogo
Esta guía está lejos de completarse.
La primera edición fue la versión 0.1, de septiembre de 1994. Se basó en
las llamadas al sistema debido a la escased de información al respecto.
Está previsto completarla con la descripción de las funciones de librería
y cambios importantes en el núcleo, así como incursiones en áreas
como redes, sonido, gráficos y entrada/salida asíncrona. Asímismo, se
incluirán en un futuro apuntes sobre cómo construir librerías dinámicas
y acerca de interesantes herramientas para el programador.
Esta guía solo será un éxito gracias a la ayuda en forma de información
o de envío de nuevos capítulos.
• Introducción
En cierta ocasión me dispuse a instalar Linux en mi PC para aprender
más acerca de administración del sistema. Intenté instalar un servidor
de SLIP pero no trabajé con mgetty ni con el shadow. Tuve que par-
chear el sliplogin y funcionó hasta las nuevas versiones de Linux 1.1.
Nadie me explicó qué había pasado. No había documentación acer-
ca de los cambios desde e
Comentarios de: Guía Linux de Programación (GULP) v.04 (0)
No hay comentarios