MATTHEW, NEIL / STONES, RICHARD
Agradecimientos
Sobre los autores
Prólogo
Introducción
A quién va dirigido este libro
De qué trata el libro
Qué necesita para usar este libro
Licencia Pública General GNU
Convenciones
Código fuente
1. Primeras nociones
Introducción a UNIX, Linux y GNU
¿Qué es UNIX?
Breve historia de UNIX
Filosofía UNIX
¿Qué es Linux?
El Proyecto GNU y The Free Software Foundation
Distribuciones Linux
Programar Linux
Programas Linux
Editores de texto
El compilador C
Trazado del sistema de desarrollo
Aplicaciones
Archivos de cabecera
Archivos de biblioteca
Biblioteca estática
Bibliotecas compartidas
Ayuda
Resumen
2. Programación shell
¿Por qué programar con una shell?
Un poco de filosofía
¿Qué es una shell?
Tuberías y redireccionamiento
Redireccionamiento de salidas
Redireccionamiento de entradas
Tuberías
La shell como un lenguaje de programación
Programas interactivos
Creación de un script
Hacer que un script sea ejecutable
Sintaxis shell
Variables
Comillas
Variables de entorno
Variables de parámetro
Condiciones
El comando test o [
Estructuras de control
if
elif
Un problema con las variables
for
while
until
case
Listas
Bloques de sentencias
Funciones
Comandos
break
El comando :
continue
El comando .
echo
eval
exec
exit n
export
expr
printf
return
set
shift
trap
unset
Otros dos comandos útiles y expresiones regulares
Ejecución de comandos
Expansión aritmética
Expansión de parámetros
Here documents
Localización y gestión de errores
Cuestiones gráficas - La utilidad dialog
Unión de todos los conocimientos
Requerimientos
Diseño
Comentarios sobre la aplicación
Resumen
3. Trabajo con archivos
Estructura de archivos Linux
Directorios
Archivos y dispositivos
/dev/console
/dev/tty
/dev/null
Llamadas al sistema y controladores de dispositivos
Funciones de la biblioteca
Acceso a los archivos de bajo nivel
write
read
open
Permisos iniciales
umask
close
ioctl
Otras llamadas al sistema para gestionar archivos
lseek
fstat, stat, y lstat
dup y dup2
La biblioteca estándar E/S
fopen
fread
fwrite
fclose
fflush
fseek
fgetc, getc, y getchar
fputc, putc y putchar
fgets y gets
Entradas y salidas formateadas
printf, fprintf y sprintf
scanf, fscanf, y sscanf
Otras funciones de flujo
Errores de flujo
Flujos y descriptores de archivos
Mantenimiento de archivos y directorios
chmod
chown
unlink, link y simlink
mkdir y rmdir
chdir y getcwd
Escaneo de directorios
opendir
readdir
telldir
seekdir
closedir
Errores
strerror
perror
El sistema de archivos /proc
Temas avanzados: fcntl y mmap
fcntl
mmap
Resumen
4. El entorno Linux
Argumentos de programa
getopt
getopt_long
Variables de entorno
Uso de variables de entorno
La variable environ
Hora y fecha
Archivos temporales
Información sobre el usuario
Información sobre el ordenador central
Registro
Recursos y límites
Resumen
5. Terminales
Leer y escribir en la terminal
Modos canónicos versus modos no canónicos
Gestión de las salidas redireccionadas
Hablando con la terminal
Uso de /dev/tty
Driver de terminal e Interfaz de Terminal General
Perspectiva general
Modelo de hardware
La estructura termios
Modo de entrada
Modos de salida
Modos de control
Modos locales
Caracteres de control especial
Caracteres
Los valores TIME y MIN
Acceso a los modos de terminal desde la shell
Configuración de los modos de terminal desde el incitador de comandos
Velocidad de terminal
Funciones adicionales
Terminal de salida
Tipo de terminal
Identificar el tipo de terminal
Uso de las prestaciones de terminfo
Detectar las pulsaciones de las teclas
Consolas virtuales
Pseudo-terminales
Resumen
6. Gestión de pantallas basadas en texto con curses
Compilación con curses
Terminología y conceptos de curses
La pantalla
Salidas de pantalla
Leer la pantalla
Vaciado de la pantalla
Mover el cursor
Atributos de carácter
El teclado
Modos de teclado
Entradas del teclado
Ventanas
La estructura WINDOW
Funciones generalizadas
Mover y actualizar una ventana
Optimización de las actualizaciones de pantalla
Subventanas
El teclado numérico
Uso del color
Redefinir los colores
Pads
La aplicación de la colección de CD
Inicio de una nueva aplicación sobre una colección de CD
Observación de main
Creación del menú
Manipulación de los archivos de la base de datos
Añadir registros
Actualización de registros
Eliminación de registros
Consultar la base de datos de CD
Resumen
7. Gestión de datos
Gestión de memoria
Distribución de memoria sencilla
Distribuir mucha memoria
Abuso de memoria
El indicador nulo
Liberación de memoria
Otras funciones de distribución de la memoria
Bloqueo de archivos
Creación de archivos de bloqueo
Regiones de bloqueo
El comando F_GETLK
El comando F_SETLK
El comando F_SETLKW
Uso de read y write con el bloqueo
Competir por un bloqueo
Otros comandos de bloqueo
Punto muerto
Bases de datos
La base de datos dbm
Introducción a dbm
Obtención de dbm
Localización de problemas y reinstalación de dbm
Las rutinas dbm
Funciones de acceso dbm
dbm_open
dbm_store
dbm_fetch
dbm_close
Funciones dbm adicionales
dbm_delete
dbm_error
dbm_clearerr
dbm_firstkey y dbm_nextkey
La aplicación de CD
Actualización del diseño
La aplicación de base de datos de CD usando dbm
Resumen
8. MySQL
Instalación
Paquetes MySQL
Configuración
Localización de errores tras la instalación
Administración MySQL
Comandos
myisamchk
mysql
mysqladmin
mysqlbug
mysqldump
mysqlimport
mysqlshow
Crear usuarios y proporcionarles diferentes permisos
grant
revoke
Contraseñas
Creación de una base de datos
Tipos de datos
Booleanos
Carácter
Números
Temporal
Creación de una tabla
Herramientas gráficas
MySQL Querry Browser
MySQL Administrator
Acceso a los datos MySQL desde C
Rutinas de conexión
Gestión de errores
Ejecución de sentencias SQL
Sentencias SQL que no retornan datos
Descubrir qué insertó
Sentencias que retornan datos
Procesar los datos retornados
Funciones varias
La aplicación de la base de datos de CD
Creación de las tablas
Añadir datos
Acceso a los datos de la aplicación a través de C
Definición de interfaz
Comprobación de la interfaz de la aplicación
Ejecución de la interfaz
Resumen
9. Herramientas de desarrollo
Problemas relacionados con varios archivos fuente
El comando make y makefile
La sintaxis de los makefiles
Opciones y parámetros de make
Dependencias
Reglas
Comentarios de un makefile
Macros en un makefile
Objetivos múltiples
Reglas que incorpora make
Sufijos y reglas de diseño
Gestión de bibliotecas con make
Tema avanzado: Makefile y subdirectorios
GNU make y gcc
Control del código fuente
RCS
El comando rcs
El comando ci
El comando co
El comando rlog
El comando rcsdiff
Identificación de revisiones
El comando ident
SCCS
Comparación de RCS y SCCS
CVS
Uso local de CVS
Acceso a CVS a través de una red
CVS front ends
Subversion
Escribir una página de consulta
Distribución de software
El programa patch
Otras opciones de distribución
Paquetes RPM
Los archivos del paquete RPM
Instalación de paquetes RPM
Creación de paquetes RPM
Unir el software
Creación de un archivo RPM spec
Creación de un paquete RPM con rpmbuild
Otros formatos de paquetes
Entornos de desarrollo
KDevelop
Otros entornos
Resumen
10. Depuración
Tipos de errores
Técnicas de depuración generales
Un programa con errores
Inspección de código
Instrumentación
Depurar sin volver a compilar
Ejecución controlada
Depuración con gbd
Inicio de gdb
Ejecutar un programa
Listado de trazas
Examinar variables
Enumerar el programa
Configuración de puntos de interrupción
Aplicar un parche con el depurador
Más información sobre gdb
Más herramientas de depuración
Lint: eliminar todo lo que sobre del programa
Herramientas de llamadas a funciones
ctags
cxref
cflow
Perfilar la ejecución con prof/gprof
Asertos
Depuración de memoria
ElectricFence
valgrind
Resumen
11. Procesos y señales
¿Qué es un proceso?
Estructura de los procesos
La tabla procesos
Visualización de procesos
Procesos del sistema
Planificación de procesos
Inicio de nuevos procesos
Reemplazar una imagen de proceso
Duplicar una imagen de proceso
Esperar a un proceso
Procesos zombie
Redireccionamiento de entradas y salidas
Threads
Señales
Envío de señales
Una interfaz de señales robusta
Conjuntos de señales
Indicadores sigaction
Referencia de señal común
Resumen
12. POSIX threads
¿Qué es un thread?
Ventajas y desventajas de los threads
Un primer programa thread
Ejecución simultánea
Sincronización
Sincronización con semáforos
Sincronización con mutex
Atributos thread
Planificación de atributos thread
Cancelar un thread
Threads en abundancia
Resumen
13. Comunicación entre procesos: tuberías
¿Qué es una tubería?
Tuberías de procesos
popen
pclose
Envío de salidas a popen
Transmitir más datos
Cómo se implementa popen
La llamada pipe
Procesos padre e hijo
Lectura de tuberías cerradas
Tuberías usadas como entradas y salidas estándar
Manipulación de descriptores de archivo por close y dup
Tubería nombrada: FIFO
Acceso a FIFO
Abrir una FIFO con open
O_RDONLY y O_WRONLY sin O_NONBLOCK
O_RDONLY con O_NONBLOCK y O_WRONLY
Leer y escribir FIFO
Tema avanzado: Cliente/servidor usando FIFO
La aplicación de base de datos de CD
Finalidad
Implementación
El archivo de cabecera, cliserv.h
Funciones de interfaz de cliente
El intérprete del cliente
Búsqueda en la base de datos
La interfaz de servidor, server.c
La tubería
Cabecera de implementación de la tubería
Funciones de servidor
Funciones de cliente
Resumen de la aplicación
Resumen
14. Semáforos, memoria compartida y colas de mensajes
Semáforos
Definición de semáforo
Un ejemplo teórico
Prestaciones de los semáforos de Linux
semget
semop
semctl
Uso de semáforos
Memoria compartida
shmget
shmat
shmdt
shmctl
Colas de mensajes
msgget
msgsnd
msgrcv
msgctl
La aplicación de base de datos de CD
Revisión de las funciones del servidor
Revisión de las funciones de cliente
Comandos de estado IPC
Mostrar el estado del semáforo
Mostrar el estado de la memoria compartida
Mostrar el estado de las colas de mensajes
Resumen
15. Sockets
¿Qué es un socket?
Conexiones de sockets
Atributos de los sockets
Dominios socket
Tipos de sockets
Protocolos de sockets
Creación de un socket
Direcciones socket
Denominar a un socket
Creación de una cola de sockets
Aceptación de las conexiones
Solicitud de conexiones
Cerrar un socket
Comunicaciones sockets
Host y ordenación de bytes para redes
Información de red
Internet daemon (xinetd/inetd)
Opciones de sockets
Múltiples clientes
select
Varios clientes
Datagramas
Resumen
16. Programar GNOME usando GTK+
Introducción a X
Servidor X
Cliente X
Protocolo X
Xlib
Kit de herramientas de software
Gestor de ventanas
Otros métodos para crear una GUI - API por ventajascon plataformas independientes
Introducción a GTK+
Sistema del tipo GLib
Sistema de objeto GTK+
Introducción a GNOME
Instalación de las bibliotecas de desarrollo GNOME/GTK+
Eventos, señales y rellamadas
Creación de widgets de cuadro
Widgets GTK+
GtkWindow
GtkEntry
GtkSpinButton
GtkButton
GtkToggleBUtton
GtkCheckButton
GtkRadioButton
GtkTreeView
Widgets GNOME
Menús GNOME
Diálogos
GtkDialog
Un cuadro de diálogo modal
Diálogos no modales
GtkMessageDialog
La aplicación de base de datos de CD
Resumen
17. Programar KDE usando Qt
Introducción a KDE y Qt
Instalación de Qt
Señales y ranuras
Widgets Qt
QLineEdit
Botones Qt
QButton: La clase básica de botón
QPushButton
QCheckBox
QRadioButton
QComboBox
QListView
Diálogos
QDialog
Diálogos modales
Diálogos no modales
Diálogos semimodales
QMessageBox
QInputDialog
Usar qmake para simplificar la creación de makefiles
Menús y barras de herramientas con KDE
Aplicación de base de datos de CD usando KDE/Qt
MainWindow
AddCdDialog
LogonDialog
main.cpp
Resumen
18. Estándares de Linux
El lenguaje de programación C
Una breve lección de historia
La colección de compilación GNU
Opciones gcc
Opciones de compilación para cumplir con los estándares
Opciones de definición para cumplir con los estándares
Opciones de compilación para las advertencias
Interfaces y The Linux Standars Base
Bibliotecas estándar LSB
Una breve lección de historia
Uso del estándar LSB para las bibliotecas
Grupos y usuarios LSB
Inicialización del sistema LSB
El estándar de jerarquíadel sistema de archivos
Más información sobre los estándares
Resumen
Índice alfabético
Esta imprescindible guía le ofrece un enfoque práctico y le proporciona una sencilla introducción al desarrollo de programas para Linux y otros sistemas operativos basados en UNIX. Los autores, expertos programadores de Linux, tratan un gran número de temas con el fin de ayudarle a conocer lo que puede ofrecerle Linux para que pueda obtener un mayor rendimiento de su tiempo de programación y del empleo del sistema Linux.
Con este libro aprenderá a utilizar las bibliotecas Linux C estándar y otras prestaciones, la optimización y eficiencia de las herramientas de desarrollo estándar de Linux, consejos sobre las llamadas básicas al sistema, los archivos E/S, la comunicación interprocesos y la programación shell, la creación de interfaces gráficas de usuario usando GTK+ o kits de herramientas Qt, entre otros muchos aspectos.