Programación en Linux C desde principiante hasta directorio competente
Conceptos básicos de la parte 1
Capítulo 1 Descripción general del sistema Linux 1
1.1 ¿Qué es Linux 2?
1.2 Características del sistema Linux y funciones principales 2
1.2.1 Características del sistema Linux 3
1.2.2 Funciones principales del sistema Linux 3
1.3 Versión del kernel de Linux y versión de lanzamiento 5
1.4 Instalación del sistema 6
1.4.1 Preparativos antes de la instalación del sistema 6
1.4.2 Instalación de Linux desde el CD 6
1.4.3 Instalar Linux desde el disco duro 22
1.4.4 Instalar Linux en una máquina virtual 22
1.5 Uso de Shell 27
1.5.1 Introducción a Shell 27
1.5.2 Tipos comunes de Shell 28
1.5.3 Uso simple de Shell 29
1.5.4 Comodín 30
1.5 .5 Cotizaciones 31
1.5.6 Comentarios 33
1.6 Comandos comunes de Linux 33
1.6.1 Comandos relacionados con directorios 33
1.6.2 Comandos relacionados con archivos 34
1.6.3 Comandos relacionados con servicios de red 35
1.7 Resumen de este capítulo 35
Ejercicio práctico 36
Capítulo 2 Conceptos básicos de la programación en lenguaje C 37
2.1 Antecedentes históricos del lenguaje C 38
2.2 Características del lenguaje C 38
2.3 Tipos de datos básicos del lenguaje C 39
2.3.1 Tipo entero 39
2.3.2 Tipo real 40
2.3.3 Tipo carácter 41
2.4 Operadores y expresiones 43
2.4.1 Operadores aritméticos y expresiones aritméticas 43
2.4.2 Operadores de asignación y expresiones de asignación 44
2.4.3 Operador de coma y expresión de coma 45
2.5 Tres estructuras básicas del programa C 46
2.5.1 Estructura secuencial 46
2.5 .2 Estructura de selección 47
2.5. 3 Estructura de bucle 51
2.6 Entrada y salida de datos en lenguaje C 54
2.6.1 Función de salida de caracteres putchar 54
2.6.2 Función de entrada de caracteres getchar 54
2.6.3 Formatear la función de salida printf 54
2.6.4 Formatear la función de entrada scanf 56
2.7 Función 57
2.7.1 Definición de función 57
2.7.2 Llamada de función 58
2.7.3 Categoría de almacenamiento de variable 59 p>
2.8 Matriz 62
2.8.1 Definición y uso de matriz unidimensional 63
2.8.2 Definición y uso de matriz bidimensional 64
2.8.3 Matrices y cadenas de caracteres 65
2.8.4 Funciones de procesamiento de cadenas de uso común 66
2.9 Punteros 69
2.9.1 Direcciones y punteros 69
2.9.2 Definición y uso de punteros 70
2.9.3 Arrays y punteros 71
2.9.4 Cadenas y punteros 72
2.9.5 Puntero a función 72
2.10 Estructura y *
**Usar cuerpo 73
2.10.1 Definir y hacer referencia a la estructura 73
2.10.2 Matriz de estructura 74
2.10.3 Puntero a la estructura 74
2.10.4 ***Usar cuerpo 75
2.10.5 Usar typedef para definir tipos 77
2.11 Lista enlazada 77
2.11 .1 Descripción general de listas enlazadas 77
2.11.2 Establecimiento de listas enlazadas unidireccionales dinámicas 78
2.11.3 Salida de listas enlazadas unidireccionales 80
2.11. 4 Para operación de eliminación unidireccional de lista enlazada 80
2.11.5 Operación de inserción de lista enlazada individualmente 81
2.11.6 Lista enlazada circular 82
2.11 .7 Lista doblemente enlazada 82
2.12 Operadores bit a bit y operaciones bit a bit 83
2.12.1 Operador "Bit a bit AND" (amp;) 84
2.12.2 Operador "Bit a bit OR" ” (|) 84
2.12.3 Operador “Negación” (~) 84
2.12.4 Operador “XOR” (^) 84
2.12.5 Operadores de cambio (lt; lt; y gt; gt;) 85
2.12.6 Campos de bits 85
2.13 Comandos de preprocesamiento en lenguaje C 86
2.13.1 Definición de macro 86
2.13.2 Inclusión de archivos 87
2.13.3 Compilación condicional 88
2.13.4 # error y otros comunes comandos de preprocesamiento usados 89
2.14 Resumen de este capítulo 89
Ejercicios prácticos 89
Capítulo 3 vi y editor de Emacs 91
3.1 Uso vi 92
3.1.1 Iniciar y salir de vi 92
3.1.2 Modo de línea de comando de vi 93
3.1.3 vi Modo Insertar 96
3.1.4 Modo básico de vi 96
3.2 Ejemplos de uso de Vi 97
3.3 Uso de Emacs 100
3.3.1 Iniciar y salir de Emacs 101
3.3.2 Operaciones básicas en Emacs 102
3.4 Ejemplos de uso de Emacs 107
3.5 Resumen de este capítulo 109
Ejercicio práctico 109
Capítulo 4 Compilador gcc y depurador gdb 110
4.1 Introducción al compilador gcc 111
4.2 Cómo usar gcc 112
4.2 .1 Compilación preliminar de gcc 112
4.2.2 Función de aviso de advertencia 114
4.2.3 Optimización de gcc 116
4.2 4 Biblioteca de conexiones 119
.4.2.5 Compilación de múltiples programas fuente al mismo tiempo 120
4.2.6 Pipeline 120
4.2.7 Opciones de depuración 121
4.3 Depurador gdb 122
4.3.1 Introducción a gdb 122
4.3.2 Comandos comunes de gdb 123
4.3.3 Depuración preliminar de gdb 124
4.4 Explicación detallada del uso de gdb 126
4.4.1 Llamar a gdb 127
4.4.2 Usar puntos de interrupción 127
4.4.3 Ver datos de tiempo de ejecución 129
4.4.4 Ver programa fuente 133
4.4.5 Cambiar la ejecución del programa
Línea 135
4.5 Introducción al depurador xxgdb 138
4.6 Resumen de este capítulo 139
Ejercicio práctico 139
Capítulo 5 El uso y uso de make Escritura Makefile 141
5.1 Qué es make 142
5.1.1 Descripción general del mecanismo make 142
5.1.2 La relación entre make y Makefile 144
5.2 Reglas de escritura de Makefile 147
5.2.1 Reglas de sintaxis básica de Makefile 148
5.2.2 Uso de comodines en las reglas 149
5.2. 3 Pseudo objetivos 149
5.2.4 Múltiples objetivos 151
5.2.5 Generar dependencias automáticamente 151
5.3 Comandos Makefile 152
5.4 Variables 154
5.4.1 La base de las variables 154
5.4.2 Asignación de variables 154
5.4.3 definir palabra clave 156
5.4.4 Indicador de anulación 156
5.4.5 Variables de destino y variables de modo 157
5.5 Llamadas a funciones comunes 158
5.5.1 Función de procesamiento de cadenas 158
5.5.2 Función de operación de nombre de archivo 162
5.5.3 Función de bucle 164
5.5.4 Función de juicio condicional 165
5.5.5 Otras funciones utilizadas habitualmente 166
5.6 Reglas implícitas 168
5.6.1 Ejemplos de reglas implícitas 168
5.6.2 Reglas implícitas Variables 169 p>
5.6.3 Reglas de patrones de uso 170
5.7 Resumen de este capítulo 173
Ejercicios prácticos 173
Parte 2 Mejora
Capítulo 6 Operaciones de E/S de archivos 174
6.1 Introducción al sistema de archivos de Linux 175
6.1.1 Estructura del sistema de archivos de Linux 175
6.1.2 Archivo tipos 176
6.1.3 Permisos de acceso a archivos 179
6.2 Operaciones de E/S basadas en descriptores de archivos 179
6.2.1 Descriptor de archivos 180
6.2.2 Entrada estándar, salida estándar y error estándar 180
6.2.3 Redirección de archivos 181
6.2.4 Creación de archivos, apertura y cierre 182
6.2.5 Posicionamiento de archivos 186
6.2.6 Lectura y escritura de archivos 188
6.3 Operaciones de atributos de archivos 192
6.3.1 Cambiar archivo permisos de acceso192
6.3.2 Cambiar propietarios de archivos193
6.3.3 Renombrar193
6.3.4 Modificar longitud de archivo 194
6.4 Otras operaciones en archivos 195
6.4.1 funciones stat, fstat y lstat 195
6.4.2 funciones dup y dup2 196
p>6.4.3 función fcntl 197
6.4.4 Funciones sync y fsync 197
6.5 Operación de archivos especiales 198
6.5.1 Tabla de contenido Operaciones con archivos 198
6.5.2 Operaciones de archivos vinculados 201
6.5.3 Gestión
Funcionamiento de limas de canal 204
6.5.4 Limas de equipos 204
6.6 Resumen de este capítulo 205
Taladro práctico 205
Capítulo 7 se basa en operaciones de Stream I/O 206
7.1 Streams y cachés 207
7.1.1 Streams y objetos FILE 207
7.1.2 Entrada estándar, estándar salida y error estándar 207
7.1.3 Almacenamiento en caché 207
7.1.4 Operaciones en caché 210
7.2 Apertura y cierre de flujos 212
7.2.1 Abrir el flujo 212
7.2.2 Cerrar el flujo 214
7.2.3 Trabajar antes de cerrar el flujo 216
7.3 Leer y escribir el flujo 216
7.3.1 E/S basadas en caracteres 217
7.3.2 E/S basadas en líneas 220
7.3.3 E/S directa 222
7.3.4 E/S formateadas 224
7.4 Resumen de este capítulo 226
Ejercicio práctico 227
Capítulo 8 Control de procesos 228
8.1 Conceptos básicos de procesos 229
8.1.1 Introducción a los procesos de Linux 229
8.1.2 Procesos y trabajos 230
8.1.3 Identificación de procesos 230
8.2 Funciones relacionadas con el control de procesos 232
8.2.1 funciones fork y vfork 232
8.2.2 función ejecutiva 237
8.2.3 funciones exit y _exit 242
8.2.4 funciones wait y waitpid 245
8.2.5 La vida del proceso 251
8.2.6 ID de usuario e ID de grupo 251
8.2.7 función del sistema 253
8.3 Relación entre múltiples procesos 255
8.3.1 Grupo de procesos 255 p>
8.3.2 Sesión 256
8.3.3 Terminal de control 257
8.4 Resumen de este capítulo 259
Ejercicio práctico 259
Capítulo 9 Señales 260
9.1 Introducción a las señales de Linux 261
9.1.1 Conceptos básicos de señales 261
9.1.2 Mecanismo de procesamiento de señales 265
p>9.2 Funciones relacionadas con la operación de señales 267
9.2.1 Procesamiento de señales 267
9.2.2 Envío de señales 274
9.2. 3 Bloqueo de señales 282
9.2.4 Temporizadores y señales 284
9.3 Resumen de este capítulo 286
Ejercicios prácticos 287
Capítulo 10 Comunicación entre procesos 288
10.1 Introducción a la comunicación entre procesos 289
10.2 Tuberías 290
10.2.1 El concepto de tuberías 290
10.2.2 Creación y cierre de tuberías 291
10.2.3 Lectura y escritura de tuberías 292
10.3 Tuberías con nombre 297
10.3.1 El concepto de canalizaciones con nombre 297
p>10.3.2 Creación de canalizaciones con nombre 297
10.3.3 Lectura y escritura de canalizaciones con nombre 299
10.4 Cola de mensajes 303
10.4.1 El concepto de cola de mensajes 303
10.4.2
Creación y apertura de cola de mensajes 305
10.4.3 Lectura y escritura de cola de mensajes 306
10.4.4 Obtención o configuración de propiedades de cola de mensajes 308
10.5 * * *Compartir memoria 312
10.5.1 ***El concepto de compartir memoria 312
10.5.2 ***Operaciones relacionadas con compartir memoria 313
10.6 Cantidad de señales 318
10.6.1 El concepto de semáforo 319
10.6.2 Operaciones relacionadas del conjunto de semáforos 320
10.7 Resumen de este capítulo 325 p>
Ejercicio práctico 326
Capítulo 11 Programación de redes 327
11.1 Conocimientos básicos de programación de redes 328
11.1.1 Arquitectura de redes informáticas 328 p >
11.1.2 Protocolo de control de transmisión TCP 333
11.1.3 Protocolo de datagramas de usuario UDP 335
11.1.4 Modo cliente/servidor 336
11.2 Conceptos básicos de la programación de sockets336
11.2.1 ¿Qué es un socket337?
11.2.2 El concepto de número de puerto338
11.2.3 Estructura de datos de sockets 338 p>
11.2.4 Funciones básicas 340
11.3 Programación de socket TCP 343
11.3.1 Flujo de trabajo de comunicación de socket TCP 343
11.3.2 Socket TCP Ejemplo de programa Cliente/Servidor 356
11.4 Programación de socket UDP 360
11.4.1 Flujo de trabajo de comunicación de socket UDP 360
11.4.2 Ejemplo de programa Cliente/Servidor de socket UDP 362
11.5 Programación del socket original 365
11.5.1 Creación del socket original 365
11.5.2 Ejemplo de programa de socket original 365
11.6 Resumen de este Capítulo 376
Ejercicio práctico 376
Capítulo 12 Programación de la interfaz gráfica de Linux 377
12.1 Introducción a la programación de la interfaz gráfica en Linux 378
12.1.1 Introducción a Qt 378
12.1.2 Introducción a GTK 378
12.2 Componentes básicos de la interfaz 381
12.2.1 Un ejemplo simple381
12.2.2 Ventana383
12.2.3 Etiqueta385
12.2.4 Botón386
12.2.5 Cuadro de texto 387
12.3 Componente de diseño de interfaz 389
12.3.1 Tabla 390
12.3.2 Cuadro 393
12.3.3 Panel 395
12.4 Otros componentes comunes 398
12.4.1 Barra de progreso, botón giratorio, cuadro combinado 398
12.4.2 Botones de opción y botones de verificación 402
12.4.3 Menú desplegable 404
12.5 Señales y funciones de devolución de llamada 406
12.6 Resumen de este capítulo 409 p>
Ejercicio práctico 409
Parte 3 Combate práctico
Capítulo 13 Diseño de una calculadora en Linux 411
13.1 Análisis de funciones del software 412
13.2 División de los módulos del programa 413
13.3 Software
Implementación específica 415
13.3.1 Archivo de encabezado 415
13.3.2 Función de visualización de interfaz hexadecimal 416
13.3.3 Función de visualización de interfaz decimal 417
13.3.4 Función de visualización de interfaz octal 418
13.3.5 Función de visualización de interfaz binaria 419
13.3.6 Función de conversión entre bases 420
13.3 .7 Módulo de procesamiento de señales 423
13.3.8 Función principal 432
13.4 Demostración del efecto del uso del software 438
13.5 Resumen de este capítulo 439
Capítulo 14 Diseño de software de chat bajo plataforma Linux 440
14.1 Descripción general de las funciones del software 441
14.1.1 Requisitos funcionales del lado del servidor 441
14.1. 2 Requisitos funcionales del cliente 442
14.1.3 Requisitos de manejo de errores 442
14.2 Introducción a las herramientas de desarrollo integradas de Glade 443
14.3 División del módulo de funciones de software 444
14.3.1 División del módulo de función del servidor 444
14.3.2 División del módulo de función del cliente 445
14.3.3 Definición del identificador de mensaje 445
14.3 .4 Diseño de la estructura del mensaje 446
14.4 Implementación específica del programa del servidor 447
14.4.1 Flujo de procesamiento de mensajes del servidor 447
14.4.2 Funciones principales del servidor y variables 448
14.4.3 Diseño e implementación del módulo de procesamiento de mensajes del servidor 449
14.4.4 Método de almacenamiento de datos del servidor 450
14.4.5 Proceso de registro de usuario 450
14.5 Implementación específica del programa cliente 451
14.5.1 Proceso de operación del cliente 451
14.5.2 Proceso de envío y recepción de mensajes del cliente 451
14.5.3 Principales funciones y variables del cliente 452
14.5.4 Diseño e implementación del módulo de funciones del cliente 453
14.6 Demostración del efecto de uso del software de chat 455
14.7 Resumen de este capítulo 459
Capítulo 15 Diseño de herramientas de administración remota de Linux 460
15.1 Descripción general de las funciones del software 461
15.1 1 Introducción a Webmin 461
15.1.2 Diseño general de software 461
15.2 Programación del lado del servidor 463
15.2.1 Flujo de trabajo del lado del servidor 463
15.2.2 Operaciones de gestión de usuarios del sistema 464
15.2.3 Operaciones de gestión de grupos de usuarios del sistema 466
15.2.4 Gestión de inicio de servicios del sistema 468
15.2.5 Operaciones de gestión de DNS 469
15.2.6 Operaciones de gestión de servicios Apache 471
15.2.7 Operaciones de gestión de servicios FTP 474
15.3 Programa cliente 475
15.3.1 Interfaz de conexión 475
15.3.2 Interfaz principal 477
15.4 Resumen de este capítulo 479
Capítulo 16 Firewall simple en Diseño de software Linux 480
16.1 Conceptos básicos de Netfilter 481
16.1.1 ¿Qué es Netfilter 481?
16.1.2 Netfilter
Mecanismo HOOK 482
16.1.3 Llamada HOOK 485
16.1.4 Implementación HOOK 486
16.1.5 Introducción a IPTables 488
16.1.6 Funciones de control que Netfilter puede lograr 489
16.2 Descripción general del diseño de software 491
16.2.1 Marco general del software 491
16.2.2 Diseño del lado de gestión 492
16.2.3 Diseño del terminal de control 493
16.3 Utilice Netfilter para diseñar el módulo de función del terminal de control 495
16.3.1 Módulo de control de gestión ICMP 495
16.3.2 Módulo de control de gestión FTP 497
16.3.3 Módulo de control de gestión HTTP 499
16.3.4 Módulo de compilación, carga y descarga 499
16.4 Prueba de función de software 501
16.5 Resumen de este capítulo 503
Capítulo 17 Diseño de una plataforma de operación interactiva remota de puerta de enlace doméstica integrada basada en Linux 504
17.1 Introducción a la tecnología integrada 505
17.1.1 El concepto de sistema integrado 505
17.1.2 Sistema operativo integrado 506
17.1.3 Procesador integrado 507
17.2 El concepto de puerta de enlace doméstica y su arquitectura de red 509
17.2.1 El concepto de red doméstica inteligente 509
17.2.2 Interacción remota de la puerta de enlace doméstica Introducción a la tecnología operativa 510
17.2.3 Arquitectura de red de la puerta de enlace doméstica integrada 510
17.3 Plataforma de desarrollo de la puerta de enlace doméstica integrada 511
17.3.1 S3C2410 Introducción a microprocesadores 511
17.3.2 Establecimiento de un entorno de compilación cruzada 513
17.4 Diseño de plataforma de interacción remota 515
17.4.1 Modelo de desarrollo de software de aplicación 515
17.4.2 Servidor web incorporado 516
17.4.3 Interfaz de puerta de enlace común CGI 519
17.5 Implementación específica de módulos de software en Linux 520
17.5.1 Módulo de verificación de inicio de sesión 521
17.5.2 Módulo de comunicación serie 521
17.5.3 Módulo de control de aire acondicionado central 522
17.5.4 Agua inteligente módulo de recopilación de datos del medidor 528
17.5.5 Resultados de la prueba 528
17.6 Resumen de este capítulo 529