Detalle del libro
Ver Índice
Prólogo
Público
Qué aprenderá
Lo pequeño es hermoso: programas de Unix Estándares
Funciones y prestaciones: programas GNU
Resumen de los capítulos
Convenciones tipográficas
Obtener código fuente de Unix y GNU
Código de Unix
Código GNU
Obtener los programas de ejemplo utilizados en el libro
Ejemplos del libro
Parte I. Archivos y usuarios
1. Introducción
El modelo de archivos de Linux/Unix
Archivos y permisos
Directorios y nombres de archivo
Archivos ejecutables
Dispositivos
El modelo de procesos de Linux/Unix
Canalizaciones: Asociación de procesos
C Estándar y C Original
¿Por qué los programas GNU son mejores?
Diseño de programas
Comportamiento de programas
Programación de código en C
Aspectos que hacen que los programas GNU sean mejores
Últimas reflexiones sobre los estándares de codificación GNU
Portabilidad revisada
Crear código según los estándares
Seleccionar la mejor interfaz para el trabajo
Aislar problemas de portabilidad tras interfaces nuevas
Emplear Autoconf para la configuración
Lecturas recomendadas
Resumen
Ejercicios
2. Argumentos, opciones y entorno
Convenciones de argumentos y opciones
Convenciones de POSIX
Opciones largas de GNU
Procesamiento básico de línea de comandos
El programa echo de V7
Análisis de opciones: getopt() y getopt_long()
Opciones de una letra
Opciones largas
Tabla de opciones largas
Opciones largas al estilo POSIX
getopt() o getopt_long() de GNU en programas de usuario
El entorno
Funciones de administración del entorno
El entorno completo: environ
env de GNU
Resumen
Ejercicios
3. Administración de memoria a nivel de usuario
Espacio de direcciones de Linux/Unix
Asignación de memoria
Llamadas de biblioteca: malloc(), calloc(), realloc(), free()
Detalles del lenguaje C
Asignación inicial de memoria: malloc()
Liberación de memoria: free()
Cambio de tamaño: realloc()
Asignación y relleno con ceros: calloc()
Resumen de los estándares de codificación GNU
Uso de asignadores privados
Ejemplo: Leer líneas arbitrariamente largas
Sólo GLIBC: Leer líneas completas: getline() y getdelim()
Copia de cadenas: strdup()
Llamadas de sistema: brk() y sbrk()
Llamadas de programador perezoso: alloca()
Examen del espacio de direcciones
Resumen
Ejercicios
4. Archivos y E/S de archivo
Introducción al modelo de E/S de Linux/Unix
Presentación de la estructura básica del programa
Determinación de errores
Valores de errno
Estilo de los mensajes de error
Realización de operaciones de entrada y salida
Concepto de descriptor de archivo
Apertura y cierre de archivos
Asignación de variables FILE * a descriptores de archivo
Cierre de todos los archivos abiertos
Lectura y escritura
Ejemplo: cat de Unix
Creación de archivos
Especificación de los permisos de archivo iniciales
Creación de archivos con creat()
Revisión de open()
Almacenamiento obligado de datos en disco
Definición de la longitud de archivo
Resumen
Ejercicios
5. Directorios y metadatos de archivo
Consideración del contenido de un directorio
Definiciones
Contenidos de directorio
Enlaces físicos
El programa link de GNU
Punto y punto-punto
Modificación del nombre de archivo
Eliminación de archivos
Eliminación de archivos abiertos
Uso de ISO C: remove()
Enlaces simbólicos
Crear y eliminar directorios
Lectura de directorios
Lectura de directorios básica
Consideraciones de portabilidad
Entradas de directorio en Linux y BSD
Funciones de posicionamiento de directorios de BSD
Obtención de información sobre archivos
Tipos de archivo en Linux
Obtención de información de archivo
Sólo Linux: Especificación temporal de archivo de mayor precisión
Determinación del tipo de archivos
Información de dispositivos
Revisión de cat de V7
Trabajar con enlaces simbólicos
Cambiar el propietario, los permisos y las horas de modificación
Cambiar el propietario de un archivo: chown(), fchown() y lchown()
Cambiar permisos: chmod() y fchmod()
Cambiar dataciones: utime()
Falsificar utime(file, NULL)
Uso de fchown() y fchmod() por razones de seguridad
Resumen
Ejercicios
6. Interfaces de la biblioteca general (Primera parte)
Horas y fechas
Obtención de la hora actual: time() y difftime()
Desglose de horas: gmtime() y localtime()
Formateo de fechas y horas
Formateo temporal sencillo: asctime() y ctime()
Formateo temporal complejo: strftime()
Conversión de una expresión temporal desglosada a time_t
Obtención de información de la zona horaria
Característica confusa de los sistemas BSD: timezone(), no timezone
Funciones de ordenamiento y búsqueda
Ordenamiento: qsort()
Ejemplo: Ordenar empleados
Ejemplo: Ordenamiento del contenido de un directorio
Búsqueda binaria: bsearch()
Nombres de usuarios y grupos
Base de datos de usuario
Base de datos de grupo
Terminales: isatty()
Lecturas recomendadas
Resumen
Ejercicios
7. Una combinación de todo: ls
Opciones de ls de V7
Código ls de V7
Resumen
Ejercicios
8. Recorridos por directorios y sistemas de arc
Una de las mejores formas de aprender a programar consiste en leer programas bien escritos. En este libro se analizan las principales API de llamadas de sistema de Linux, las que constituyen el núcleo de cualquier programa importante, mediante la descripción de código de programas de producción que se utilizan cotidianamente.
Mediante el análisis de programas concretos, no sólo aprenderá cómo utilizar las API de Linux, sino que también puede examinar problemas del mundo real (de rendimiento, portabilidad o robustez) que surgen al diseñar programas. Además, un gran número de los aspectos descritos se aplican también a todos los sistemas modernos de Unix.
Con contenidos sencillos y claramente estructurados, esta obra se convierte en la guía esencial para abordar temas claves como la administración de memoria, la entrada y salida de archivos, o entender aspectos como los procesos y señales, la compatibilidad de programación y la necesaria e inevitable depuración del código.