You are on page 1of 839
Programacién en Linux 2.° edicié6n ‘Al descubierto : Kurt Wall, et at, BSS ‘Traduceién i S Sy ‘Traducciones Vox Populi, S.L, 1 ae i E sit a nn i 9 9 Madrid * México « Santafé de Bogotd » Buenos Aires « Caracas + Lima Montevideo + San Juan « San José « Santiago « Sao Paulo + White Plains a Te ee lal wn : ee ieee ah indice de contenido. Lo que este libro hard por usted. Leciores previstos Novedades de esta edicién. COmo leer este HBIO nn Convenciones tipogriticas utilizadas en este libro... Parte | El Grupo de herramientas de programa de Linux 1 Linux y la programacién Linux en contexto. Linux llega a la mayorfa de edad .. Linux ayer §Por que prog tevguvauesinieremen a 0. capitulo Ef conjunto ds herramicntas pura la progeamucivin en Linus Entrada, salida, archivos y irectories.. Procesos y sineror Togues Resumen, 2 Configuracién de un sistema de desarrollo. Consideraciones generales aca madre y ta CPU. EJS integradk Procesador.. BIOS... Memoria.. ngeie Cajas y fuentes de alimentaci ) ) ) ) "3 ) ) ) xm , peat } XXIV XXIV XxIV ) XX , 1 ) 3 ) 4 4 ) 6 7 ) t 8 ) 9 10 ) 10 u ) n 2 ) 2 B ) 5 ) Vi. Programaci6n en Linux Al descubierto Inpice DE CONTENIDO Hardware de interaccién con el usuario: video, Sonido, tecadosy ratnes.. Tarjetas de video.. Monitores. ‘Tarjetas de sonido. Teclados y Ratones Dispositivos de comunieacion, puertos y buses ‘Médems ¥ Tarjetas de interaz de red SCSI... USB y Fires ‘Tarjetas serie IRDA... Tarjetas PCMCIA ISA Plug and Play... Dispositivos de almacenarmiento.. C05 JUFOS nnn Discos desmontables. CD-ROM-DVD .... Copias de seguridad en cinta . Periféricos extemnos Impresoras. Excéneres Camaras di Automatizacién del usuario... Sistemas completos... Portétiles. Software de desarrollo Biblioteeas clave y archivos de Depuradores Utilidades de brogramacon. Editores de texto . Resumen, aabezamiento.. 3 C6mo utilizar el grupo de compilador GNU. Caracteristicas de GNU CC Ejempio tutorial Opciones de linea de comanidos comune’. 3 (Cémo trabajar con archivos Include y de biblioteca Opciones de mensajes dle error y aviso.. Opciones de optimizacién Opciones de depuracion...... Opciones especificas de la arquitectura Extensiones C de GNU La portabi Extensiones GNU. PGC: El compilador de Pentium. Resumen. . . 4 Administracién de proyectos utilizando make de GNU .. {Por qué make? ; Cémo escribir archivos Reglas del archivo make Objetivos falsos. ‘Variables Reglas implicitas. Programacién en Linux Al descubierto Tnpice DE conTENIDO: ‘Opeiones y argumentos de Ia Hinen de eomandos, Depuracién de make. ‘Mensajes de error comunes de make Objetivos itites del archive make Resumen Como crear software autoconfigurable y portatil. ‘Consideracton de la portabilicud, Qué es fa portabitidad de un programa... ‘Trucos y pistas sobre In portabilidad Estudio de Aniocont. mo vonstruir contig C6mo estructurar el archivo. Utilidades de Autoconf interesantes, 8 IMUM on Comprobuciones de programas alternatives. Comprohacién de funciones de biblioteca... Comprohaciones de archivos de encaty-za Comprohaciones de estructura Comproticiones de typedet’s Comprobaciones del comportamiento del compilador ‘Comprobaciones de servicios de sistema. ‘Comprobaciones de variantes UNIX... Macros genéricas, i Un guién autoconf comentado ... RestIME rn Comparacién y fusién de los archivos de cédigo fuente ‘Comparicién de archivos utilizando el comando diff Opciones y angumentos de la linea de comandos de diff El eomando dift3..... Preparacién de los parches del cédigo Fuente ‘Opciones de Ia linea de cor ‘Creavisn dle um parche. Aplicacidn de un Restmten Control de vorsidn utilizando RCS y CVS... (Como utilizar el Sistema de control de revisi6n (RCS) Utitizaciin hisiea de RCS . Como encontrar diferencias entee archivos RC Otros commandos RCS (Cémo utilizar el Sistema de versiones 60 ‘Ventajas sobre RCS. Cémo configurar CVS Com hhivos fuente, cambios en el depésito Flos cambios, Cémo aad y eliminar archives... Cémo resolver conflictos de archivos... ‘Comandos CVS .. Opciones CVS .. Resumen., srrentes (CVS) 133, 133, 137 vil Vu [Presramacién en Linux Al descublerto Tnbice bE conENIDO 8 Depuracion.. ‘Compilacién en GDB. ‘C6mo utilizar Jos comandos GDB basicos.. (Cémo iniciar GDB Ingpeccién de c6digo en el depur (Cémo examinar los dato: C6mo configurar puntos de ruptura Cémo examin: Conceptos y comandos GDB avamzados Ambito y contexto de variable.... Cémo airavesar in pila de Haumaudas (Cémo trabajar com los archives fi Cémo comunicar con el Sheil. m0 aus a om programa eject. Resumen, i 9 Administracién de errores..... La aulministracién de errores es lo correcto Opciones dk Facilidades del tenguaje C assert usted mismo... Como utitizar el preprocesador. Funciones de biblioteca esténdar.. Como utilizar el registro del sistema, Opciones de registro del sistema. Funciones de registro cn cl sistema Programas de usuario. Resumen... 10 Utilizacién de las bibliotecas Bibliowecas cominmem jas de bibliote, El comando nm.. El comando ar... El comand tad Ideuntig es de entomo y uichives de configuracion. ir y utilizar biblioteeas esti: bir y utilizar biblioteeas compa Cémo utilizar objetos conipartidos eangados di La interfaz dl (Commo uiitizan ei Resumetcssunas Parte Il Entrada, salida, archivos y directorios 11 Entrada y salida Caracterfiticas y conceptos basicos EL modo de archivo ... Deseriptores de archivos. “ {Qué es tn descriptor de archivos 143 144 145 145 147 148 150 152 154 154 155 156 158 158 160. 164 162 162 163 163 165. 167 ns 176 77 182 183, 185 186 186 187 188 it 191 191 192. 193 193, 194 199. 201 202 204 205 207 209 210 2 215 215 Programacién en Linux Al descubierto ‘Cémo utitizar los descriptores de archivos Resumen... 12. Cémo trabajar con archivos y directorios Funciones de archivo estindar Liamadas de entrada y salida Cio 13. Control de proceso: EL modelo de proceso de Lin Atsibutos de proceso . Cémo crear procesos.. ‘Cémo manipular procesos... Inpice De conrenipo x del deseriptor de archives Cémo abrir y cerrar descriptores de archives. Ceimo leer y escribir deseriptores de archivos no redhicir archivos: utilizacién de ftruncate... ‘Cémo colocar el puntero del archive: utilizacion de Ise! mo sineronizar con el disco: utilizacisn de fSyMe mio ob Gn de archiver utilizaeién d stat ‘Como cambiae ki propiedad de un archive: utilizaeién de fehown ‘Cémo cambiar los permisos de los archivos: utilizaci ‘Cémo bloquear un archivo: utilizacién de flock y fentl ‘Cémo utilizar fas Hamadas dup y dup2. Cémo leer y escribir miltiples archivos simultineament El cuchillo del ejército suizo: utilizacion de ioctl. de fehimod, ulilizacién de select. ‘Cémo abrir y eerrar archivos ‘Cémo leer y escribir archivos. Camo obtener el estado de archivo. Salida formateada Eniruda formatead: Entrada y salida de caracteres. Entrada y salida de linea Ubicacién de archivos.. Control de buffer Cémo eliminar y dar un nombre nuevo a un archivo . ‘Cémo utilizat archivos temporales. bajar con direetorios ‘Cémo encontrar el directorio actual. ‘Cémo cambiar directorios.. Creacién y eliminacién de directorios Cio obienes listados de diteet0Fi0 cnn butos especiales del sistema de archivos ext2 Identificador de procesos.. ID reales y efectivos Programas SetUID y SetGI - Informacién de grupo y de usuario. jonal de procesos ‘Como utilizar la funcién system. La llamada de sistema fork... La familia exee. Cémo utili 259 261 262 268 276 277 279 281 282, Programacién en Linux Al descubierto voice DE conto Cémo atender Procesos, la familia wai Programas de eliminaci6n... Seiiales ....., 1Qué es una seal? Cémo enviar sefiales.. ‘Cémo captur sefiules .. / ‘Cémo detectar sefiales .. } Planificacién del proceso ) Resumen. ) 14 Introducci6n a los {Qué son los hilos? ) La llamada a funci6n _clo La interfaz. de pthreads... ) {Qué son los pthreads? . ‘Cufindo utiizar pthreuds ) -« La funcién pthread_create La funcién pthread_exit. ) La funcién pthread_joi La funcién pthread _atfor ) Cancelacién de hit ‘Macros de limpieza pthread, Condiciones de pthread. La funcién pthread_equal ) Atributos de hilo Seméforos.. ) Resumen... ) 15 Acceso a informacién de sistema. Informacién de proceso... El archivo cmdline. El archivo environ. El directorio fd Elarchivo mem. El archivo stats... El enlace simbélico ew El enlace simbélico exe Fl archive maps Informacién general del sistem El archivo /proc/emdline. El archivo /proc/epuinta El archivo /procidevices.. El archivo /proc/dma... Elarchivo /proc/file systems. El archivo /procfinterrupss El archivo /proc/ioports . El archivo /proc/kcore. El archivo /prockkmsg El archivo /prociksyms El archivo /proc/loadavg El archivo /proc/locks. B] archivo /procimd stat 282 310 3 aun 313 317 319 |__Programacién en Linux Al descubierto Thoice D& conTENDO El archive /proc/meminto EL archivo /procfinise Jprocimodules; E] archivo /proc/mounts. El archivo /proc/pei..... Elarehivo /procirte El archivo /proc/stat. El archivo /procfaptime El archivo Jprociversie El subdirectorio /proc/net. El subdirectorio /proc/sesi El subdirectorio /procisy: Cambios en proc en micleops venider0s... Resumen, 16 Administracién de memorii Repaso de In administracién de memoria Ue C La tuncisn malloe Archivos de correspondencia de memoria. La funcién mmap La funcién munmap.... ‘La funcién msyn La funcion mprotect ‘Cémo bloqucar fa memoria. {a funci6n mre Cémo implementar eat utlizando correspondencias Ue memoria... (Cémo encontrar y arreglar los problemas de la memoria Un problema hijo Hleetie Resumen. 17, Comunicacién interproceso ... 351 Conductos, i 352 Cémo abrir y cerrar conducto: 354 Como leer y exeribir conductos 355 Un quetnle mis senel 59 FIFO... . 361 {Qué son los FIFO: 361 ‘Cémo erear un FIFO. 363 Cémo abrit y cestar FIFO sun 364 Cone tens y eheribir FIFO, one 365, Introduccién del IPC del sistema V 368 Conceptos claves del IPC del si 368 Problemas con el [PC del sistema V... 370 Linux y el IPC del sistema V an ‘Memoria compartid sca an Como erear un segmento de memoria compartida.. gone. TS Cémo adjuntar un segmento de memoria compartida 314 Colas de mensaje: 377 ‘Cémo crear y abrir una cola... 378 Cémo escribir un mensaje en una cola 380 xt Xil Programacién en Linwx Al descubierto INDICE DE CONTENIDO 18 Demonios. 20 ‘Cémo leer mensajes de la cola.. Cémo eliminar colas de mensajes. Seméforos.. Cémo crear un seméforo. Céino controlar y ei Resumen. ‘Aspectos bisicos de los demonios (Cémo crear un demonio. Llamadas de funcién. Manipulacién de errores ... (Cémo comunicarse con un demor Cémo leer un archivo de configuracién... : (Como afiadir manipulaciGn de sefiales a un demonio.. Resumen. Definicién de sockets. Dominios de comunic . stan Los fundamentos de la programacién de socket ‘Asignacién e inicio, Liamudus de sistema dle eonexion. ‘Transferencia de datos Cierre Ejemplos de cliente-servidor que utilizan sockets Ejemplo de scrvidor.. Ejemplo de cliente. Como implementar un cliente web sencille........ ‘Cério comprobar el servidor web y el cliente web 2 Cémo ejecutar el servidor web utilizando Netscape Navigator como cliente, Cémo utilizar sockets con otrus lenguajes de programacién... Como programas Sockets de Dominio UNIX con Perl Herramientas para tevisar las actividades de sockets. Resumen., UDP: Protocolo de datagrama de usuario Perspectiva general de UDP. UDP frente a TCP, . Ventajas y desventajas de TCP Ventajas y desventajas de UDP. C6ino elegir qué protocolo tiie Implementacién de una aplicacién basada en UDP, Envio de datos con UDP. Recepcién de datos UDP sa... Comprobacién de errores faininia E/S no bloqueante.. Resumen. 382 385 386 387 390 392 393 304 304 396 398, 401 402 405 410 411 413 ala 414 415 als 417 419 420 421 421. 424 426 427 21. Sockets de multidifusi6n y E/S bloquean ‘Cémo configurar Linux para soportar ki multiditusién IP. ‘Cémo reconstrur el niicleo Linux para que soporte la muliidifusion IP... Programas de ejemplo para ta retransmisi6n de muti (Cémo retransmitir datos eon ta mnultiditsi6n IP. - , 10 crear un cliente para escuchar las retransmisiones de multidifusion 1P.. Cémo ejecutar los programas ejemplo de multidifusién IP., Resumettn Parte V Programacién de la interfaz de usuario 22 Control de terminales... La interfaz de terminal. vo Céino controlar los terminales ... es de conirol de velocidad. Funciones de control de tinea. Funciones de control de procesos.... Utilize ba interfiz de terminal Céno cambiar los modos de terwinal Utilizacidin de Terminfor Capacidacles de Terminto, Programacién de Terminfc Ciimo trabajar con las eapacidades Terminfo. Resumen... 23 Iniciacién alas ncurses. ‘Una pequefia historia sobre las ncurses. Cémo comiitar con ncurses Cémo depurar programas neurses.. Acerea de las ventana Disefio de ventanas de ncurses. clea Convenciones de nombres de funciones de ncurses... Inicio y termine estructura eh ferminacion de nk = Hustracién de la iniciaci6n y terminacién de ncurses. Eitan y sac Rutinas de salida Rutinas de caracteres .. Rutinas de caden: Ratinaas ke salida va Rutinas de entrada. Rutinas de color Administracién de ventanas Funciones vari Resumen. 24 Programacién avanzada de ncurses. Capacidades ncurses adicionales . Soporte de ratén Soporte de ment Soporte de formula Como wr Gon los Futones.. Programacién en Linux Al descubierto Tubice DE cONTENIDO 463 464 465 466 4677 469 473 43 wf 475 XIV Progh én en Linux Al descubierto Tnpice be conTENIDO La API de rat6n... Ratinas de control del ratéa Programa ejemplo. Utilizacién de tos mend. La API de ments Rutinag de control de nents Programa ejemplo Formularid ncurse La API de formularios Rtinas de administra Programa ejemplo... Resumen, n de los formularias... XOpenDisplay wen nnnse XCreatesimpleWindow y XCreateWin Cémo corresponder y quitar correspondencia de ventanas ‘C6mo destruir ventana: Manip Bu ‘Cémo iniciar comtextos y fuentes de graficos. (Cémo dibujar en una X Window Un ejemplo de programa Xlib La API del conjunto de herramientas X_.... Introduccién a la utilizacion det conjunto de herramientas X ‘Cémo establecer los argumentos de los widgets utilizando el conjunto de herramientas ss fanagement Signaling, SefializaciGn de la administracién de energia de visualizacién). DRI (Render Interface, Interfaz de represent DGA (Direct Graphics Architecture, A XY (X Video, Video X). i Resumen. z directa) a quitectura de gréficos directa), 26 Widgets Athena, Motif y Lesstif ‘Cémo utilizar los widgets Athena... El widget Label de Ationa,... EJ widget Command Button de Auhcina widget List de Athens... El widget Textde Athena... El widget Simple Menu de Athena. Cémo utilizar los widgets Monit El widget Label de Motit ‘The Motif List Widget BI widget Text de Motif. Cémo escribir un widget At Utilizaci6n del archivo fetch, izacién del archivo URL.c.. Cémo probar el URLWidget. Cémo uti 529 530 532 534 535 335 539 Sal 342 342 ssi 552 553 555 557 558 558 559 559 560 562 7 28 29 Programaci6n en Linux Al descubierto Thpice DE CONTENIDO La clase Component Lia clase Pane Window. La clase Label La clase Button. La clase Text Resumen Programacién GUI con GTK+ Introduccién a GTK+. Cémo manipatar eventos en GTK + Un pequefo programa ejemplo utilizando GTK+ Widgets GTK variados Widgets contenedores de GT! Un programa GTK+ para la visualizaciGn de los archivos XML. ‘Una pequeita introducci6n a XML expat, el analizador sintéctico de XML de James Clark. ‘Cémo implementar el programa de visualizacion XML de GTK- Cémo ejecutar el programa de visualizacién XML de GTK.. Un programa GUI que utiliza el widget Notcbook.. Implementaci6n del programa ejemplo del widget Notebook. Cémo implementar el widget de dibno. Como ejecutar programa ejemplo del widget GTK Notebook (Cémo utilizar GTK+ con otros lenguajes de programacién Como utilizar GTK+ con CH. C6mo utilizar GTK+ con Perl. Cémo utilizar GPK+ con Python... Herramientas RAD para GTK+ Resumen... . Programacién GUI con Qt Manipulucién de eventos anulando los métodos de la clase QWidget La clave QWidget Inplensentacidn ae bn clase Drnw Wideet Prucha del DrawWiduet.... Cémo derivar la clase Stitel CD Wik Utiliaacion Ue seiales y ranuras.. Ejecuci6n del programa ejemplo senal-ranura lnplementicién del programa XMLview con Qt SANZ una AVI Seuctila de XML, DOM: el Masta de oj sr dosunorss Resumen, o seer Graficos 3D utilizando OpenGL y Mesa.. Qué necesitamos para este Capitulo nce Céimo utilizar OpenGL. Céimo progranar gris 3D orbits mo crear una ventana para los graticos OpenGL e inicializar Open GL ‘Cémo crear objetos 3D sencillos utilizando GLUT... Gémo colocar objetos en el espacio 3D utilizando coordenadas x,y.2 ‘Cémo rotar un objeto respecto a todos 0 alguno de sus ejes x-, y- y 2- Cémo activar la utilizacién de propicdades de material. Cémo activar las comprobaciones de profundidad.. ‘Cémo manipular los eventos de teclado [el xy [Pregtamacion en Linux Al descubierto . ———l Thies contenibo ——_ \ £ C6in0 actualizar los gificos de OpenGL, para obkener efecto de animucién istado del programa Orbi 7 ©) Mapas de textura sn iS Cémo generar un cubo de ea Cémno crear mapas de texturas Listado del programa Cube. Resumen, Parte VI Temas especiales 30 Programacién shell con GNU Bash ¢Por qué bash? - Fundamentos de bash... Comodines .. Expansién con corchete Caracteres especiales. (Como utilizar las variables bash ‘Cémo utilizar los operadores bash Operadores de cadena .neneonnn {© Operadores de concordancia de patron. Control de flujo Ejecucién condicional: if. Bucles determinados: for 2. Bucles indeterminados: while y until Estructuras de seleccisn: case y select. Funciones Shell rad y Salida, Redirectores de E/S.. Cadena E/S sre i Procesamiento de linea de contunlos, Contre de trabajos y procesos.... ‘Manipulacién de sefiales de shell. Cémo utilizar trap. Resumen, ¥ 31 Controladores de dispositivo.. Tipos de controladores sane a Contoladores de dispositive de nic lew en Modulos de nucleo carpables Bibliotecas compartida: Programa de modo usuario sin privilegios Programas de modo usuario privilegiados...... Demonios ue a Dispositivos de cardcter frente ai ‘Cémo construir et hardware. ee Introduccién a Jos trabajos de un motor de pasos Puerto paralelo estindar y bidireecional Cémo configurar nuestro entomo de desarrollo Cémo depurar tos controladores a nivel de niicleo Interioridades del controlaclor de dispositive, Puerto E/S de bajo nivel... Actsws la memoria utilizando DM) sensi Inicio de interrupciones para utilizar controladores de dispositivo.., “+ Cémo poner en capas tos controladores de dispositive los evtiticamvente ositivos de Bloque. on 677 679 680 681 682 685 719 720 720 a 721 721 2 m2 ™m 723 724 721 729 730 Bl Tl 733 733 735 Programaci6n en Linux Al descubierto Inpice be conTeniDo Controlador de prueba de modo usuario sencill 735 C6mo crear un controlador de nicteo 736 Repase del esi 1 Como compilar el controlador... 763 Cémo utilizar et controlador de ndcleo 764 765 Otras Iventes de informe 765 Resumen, 766 Parte VII Para finalizar... 767 32 Administracion de paquetes. 769 Introduccidn a los archivos tar 770 Cémo crear archivos tar ™m Cémo actualizar archivos t Bhicarmwenen 13 ‘Cémo hacer un listado del contenido de los archivos tar 114 Cémo extruer archivos de un archivador 715 Introduecién al comando install... 776 wal Admin » mM {Que es RPM? 719 Necesidades minimas.. 780 C6mo configurar RPM... . i 780 ‘Cémo controlar la construceién: utilizacién le un archivo spec. 783 Cémo analizar un archive spec.. 2 784 Cémo consiruir ef paguete.. 787 El estindur de jerarguia de archivos 788 Resumen... 790 33, Documentacién. 791 Cémo eseribir paiginas tle nrauual 72 ‘Componentes de: un pigina de 792 Fjemple ke papi set nani 193 Come uttizar of eomaundo graff 796 Convenciones de Linus 71 Com atiizat DocHiok 198 4€0ne es Docltiok? 799 Tags de Docbook... 799 Unidocumento Dactiisk ale al wale... 805 807 809 cci6n y renuncia . 810 2 estilo MIT/X.. 810 a estilo BSD. gil A aMtistica none. . 812 as puiblicas wenerales de GNU. 813 La Licencia pablica peneral de GNU ct 813 La Licencia pibtiea general de biblioteca de GNU. Bid La Definicién de fuente abiert.... 815 Resumen. 817 Indice alfabético.... 819 Aad, Los autores Kurt Wall ha utilizado y ha programado en Linux desde 1993, Sin un orden en parti — cular, le gusta el café, cocinar, codificar, estar levantado hasta tarde y dormir también has- ta tarde, lo que hace de su trabajo diario en Caldera Systems un verdadero desafio, Cuan- do se cansa de las computadoras, estudia artes culinarias y suefia en ir a una escuela de cocina y convertise en un chef profesional. Piensa que las computadoras y Ia cocina son luna utilizacién encomiable de su graduado en historia americana. Kurt prefiere no eseri- bir sobre si mismo en tercera persona. David B. Horvath, CCP es Director de Asesores en el drca de Filadelfia, Pensilvania, ‘Trabaja en este campo desde hace 15 afios y es también profesor adjunto a tiempo parcial en los institutos locales, donde ensefia aspectos que incluyen técnicas de programacién en C++, UNIX y bases de datos, Termiiné su master en Dindmica Organizativa en la Univer- sidad de Pensilvania en 998 (y probablemente esté yendo a més clases mientras se publi a este libro). Ha impartido seminarios y talferes de trabajo a sociedades y corporaciones profesionales nivel internacional, David es el autor de UNIX for the Mainframer (Prentice-Hall/PTR), coautor de Sams Teach Yourself C++ for Linux in 21 Days, ha. contribuido en UNIX Unleashed, Segunda ediciGn (con créditos de portada), Red Hat Linux Unleashed, Segunda y Tercera ediciones, Red Hat Linux 6 y 7 Unleashed, Using UNIX, Segunda edici6n (Que), UNIX Unleashed, Tercera edicién, Learn Shell Programming in 24 Hours, Linux Unleashed, Cuarta edicién y ha escrito nufnerosos articulos en revistas. Cuando no esté al teclado trabajando 0 escribiendo, se le puede ver trabajando en el Jardin 0 remojindose en una bafiera caliente, Lleva casado més de 13 afios y tiene varios erros y gatos (el nimero de los cuales parece crecer sin parar), Podemos encontrar a David en |pu2@cobs.com. Sin bromas, por favor. Patrik Grij novia, sus hij Jansson (patrikj@gnulix.org) vive en Borlinge, Suecia, con su ¥ dos gatos, Herbert y Havarthi. Lleva en activo en el campo de la cien- cia de las computadoras cerca de dos décadas. En los pasados cinco aifos se ha espe- cializado en los problemas relativos a Ja Web, Internet ¢ intranets, Es coautor de Servie dor Apache Al descubierto y de Red Hat Linux 7 Unleashed, También és autor de varios articulos sobre la programacién de Apache y Web. Actualmente trabaja como arquitecto de sistemas para la Administracién de Carreteras Nacional de Suécia. Ade- més es uno de los padres fundadores de la Gnulix Society y tino de los contribuyentes principales a sus esfuerzos para incrementar el conocimiento de las soluciones de fuen- te abierta, Kevin Lyda fue fork(Jed en 37058400. Después de perder muchos aiios procesan- cen varios lugares (Brooklyn; Salina, KS; Huntington, NY; Bifalo, NY), comenz6 a conseguir resultados, primero en Biifalo, después en Boston, MA y pionto (esperamos) en el Condado de Galway, Irlanda. Espera que todas sus Iamadas a read(STDIN_FILENO,...) tengan éxito a lo largo de ta vida del proceso y que Ia salida de datos sea itil. eye ae yb te ro) ie tdn en Linus Al descubierto | Para Tricia, Todavia eres la tinicu, fie vin jae all i listens ib ty oy t {3 Dedico mi parte del libro a un buen amigo y colega, Darshan Shah, y a su maravillo- "$4 fomniia (su mujer Trupti y sus dos hijos, Shaili y Kunj), Siempre tiene algo bueno que ‘decir y,mantiene un punto de vista positive de la vida incluso cuando los demas ven venit “las nubes negraf. También ha preguntado algunas de las cuestiones técnicas més desa- fiantes que he ofdo nunca, me Jo he pasado muy bien ayudando a solucionarlas, Darshan ml Bi y,$u familia nos han ayudado a mi mujer y a m{.a introducimos en su cultura, 4c aid B. Horvath, CCP Sabbah oh 4 fay Para Nadiq: habibti, Ahmed y Mohammed. ' iy Pattik Grip-Fansson, ip taaaniy vat ba | as Garbrick, el gran poobah. \ Agradecimientos 4, Quierp dar jas gracias a todos los que han leido Ja primera edicién de Programacién en Linux Al deseublerto, especialmente a aquélios que me escribieron para seitalar errores y lugares donde tuve lapsus mentales, Muchas de sus sugerencias se incluyen en esta edici6n. ‘También quiero disculparme con todos aquéllos que compraron la primera edicién esperan- do un CD-ROM y no lo obtuvieron, no tuve oportunidad de corregir el manuscrito después de tomar la decisién de no incluir el CD-ROM. Oy vey, es ist katz mir! : «Sh, lo he escrito yo, pero la maravillosa gente de Sams Publishing hizo que cuajara. De nuevo, Angela Kozlowski mostré una paciencia considerable cuando 1a planificacién decafa, Angela, eres sencillamente la mejor; siempre habré un Inger para ti en mi corazén. ‘Tony Amico fue un punto de apoyo impresionante ¢ hizo el libro mucho mejor de Jo que Ig habrfa sido de otra manera. Kim Cofer, mi editor de copias, hizo un gran trabajo leyen- do en mi mente y corrigiendo mi mis errores gramaticales y de ortografia. Kim, todavia ho ine gustan los infinitivos. Jason Wright, mi editor téenico, se ha ganado mi agradeci- miento al evitar que suene como un completo idiota, Gracias, Jason. Gracias a Christina Smith por hacer que siguieran llegando mis capftulos de revisién. Christina, nunca res pondiste mis preguntas sobre las profundidades de la cocina. Especial mencién a David B. Horvath, CCP, y a Patrik Grip-Jansson, quienes se introdujeron y ayudaron a termina ¢l libro cuando el proyecto corrfa el peligro de quedar aparte. Kudos a Mark Watson por empefiarse en sus principios, incluso si no estabamos de acuerdo. , A.todos los animadores, gracias. Pap, Rick, Amy, Isaac Benjamin y Morgan Leah al Pringipio de 1a lista porque, bucng, son mi famitia, Al final del dfa, la familia es todo lo que tenemos, Mis colegas y amigos de Caldera también me sirvieron de apoyo, siempre. t : - ay P que me dejara el libro en ca Programacién en Linux Al deseubierto . Gracias a James Stone, Mare Christenson, Erik Ratcliffe, David Brown, Erik Hughes, Benoy Tamang y Dean “Mr. Fountain Pen” Zimmerman, Estoy orgulloso de trabajar con vosotros. Ka me demuestra que los sargentos y las en Sessior ses una gran admit returias manejan el mundo. Especiales agradeci: istradora, que mientos a Kathy Marten por sus plegarias. También hay un rine6a para Debi Cunning- ham, un compaiiero de aventuras en el camino de! miedo crénico, Tam cido de contar todavia con mis animadoras Tricia y Joan Kritzberg, sentir bienvenido, aunque pasaré mucho tiempo antes de que vuel de pintura, Un modesto agradecimiento a la enorme influencia de W. Richard Stevens en mi esti- lo de escritura y programacién, Tan gran profesor como gran pérdida, ‘Como es normal, todo el mundo mencionado hizo que el libro Tes son s6lo mios, Quiero agradecer toda Ja ayuda prestada por la buena gente Computer Publishing). in estoy agrade- que siempre me hacen va a coger una brochgs * fuera mejor. Los erro- Kurt Wall de Sams (Macmillan Como en todo proyecto que es una adicién al trabajo diario, alguien tiene que hacer un. sucrificio. En mi caso, quien sufrié més mientras me lo pasaba bi esposa Mary. Lo mas maravilloso es que ni siquiera se quejaba (o, p siado). ien escribiendo fue mi or Io menos, no dema- David B, Horvath, CCP Quiero agradecérselo a todos los que se lo merecen, Sabéis quiénes sois. Gracias. Gracias a: mama y papa (experimentos genéticos y todo eso), Patrik Grip-Jansson Jessica Hekman (por dejérme imentarlo con la peluquerfa), RMS y piratas de todo el mundo (por darme cosas sobre las que escribir y un entorno donde disfrutar). Kevin Lyda Es dificil exagerar el increfble éxito y popularidad de Linux. Este éxito ha traido con- Sigo una gran demands de programadores que sepan eémo desarrollar aplicaciones para Linux, una demanda que, en un futuro inmediato, no puede hacer otra cosa que crecer Sin embargo, puede ser dificil saber donde y cémo empezar a programar en Linux. Para el Programador de Linux novato, ;bienvenido a la revolucién! Verd en este libro una exce- lente introduccién y una gufa en muchos de los aspectos de la programacién en Linux. Si &s un programador de Linux experimentado, Programacién en Linux Al descubierto tie. mo ne también algo para usted, porque inspecciona todo el intervalo de temas relacionados | con li progranuci6n de Linux, incluyende algunos que puede que no haya explorndo. | Lo que este libro hard por usted Rregramacién en Linux Al descubierto se propone mostrale cémo programar en y bara Linux. Se centra casi exclusivamente en el lenguaje C porque C es todavia la lingua Jranca de Linux. Después de introducir algunas herramientas'de desarrollo esenciates, se sumerge en Ia programacién utilizando el modelo 1/O de Linux, La tercera parte del libro Cubre los problemas de procesamicnto y sincronizacién, incluyendo las amenazus, admi- nistracién de memoria y comunicacion interprocesos. La quinta parte esta dedicada a la t Programacin de la interfaz de usuario de Linux utilizando herramientas basadas en tex- ‘0 Brificas (el sistema X Window). Otra parte se dirige a algisios teins varios, inclu yendo la programacién shell y la escritura de controladores de iinidades. El libro termina con tres capitulos sobre un tema normalmente ignorado en libros de programacién: la entrega de sus aplicaciones a los usuarios. Estos tres iltimos capitulos le muestran cémo. uilizar las herramientas de administracién de paquetes como RPM y cémo crear docu. mentacidn iitit: También cubren los problemas y opciones de las licencias, Para cuando uleance el final del libro, deberfa estar bien preparado para participar en el gran fenémme. : no sociol6gico y tecnolégico Hamado “Linux”. _ - Progkamacién en Linux Al descubierto Inrropuccion ~ tele gles | ie al ‘ . Lectores previstos [Los programadores familiarizados con otros sistemas operativos pero nuevos en Linux, obtendrin una sélida introducci6n en la programacién de Linux, Se les mostrarin Jas herramientas que utilizardn y en el entomo en el que trabajarén, \ [os programagores experimentados de UNIX encontrarén los idiomas de programa- |éisa’ge Linux muy familiares. Para este grupo, e! libro resalta las diferencias entre Linux _Y las versiones patentadas de UNIX. La compatibilidad méxima serd un tema importante porque Linux se ejecuta cn una variedad de plataformas siempre en crecimiento: Intel 1386, Sun Spares y UltraSparcs, Digital Alphas, procesadores MIPS, Power PC y compu- tadoras basadas en Motorola 68000 de Macintosh. Los programadores intermedios de C también obtendrin mucho de este libro. En general, la programacién de Linux es similar a la programacién en cualquier otro sistema arecido a UNIX; asi que se les introducird en el camino de convertirse en un programa- dor de UNIX efectivo y en In comprensién de las peculiaridades del pirateo Linux/UNIX. vans OBIE ie (Novedades de esta edicién ’ i +, Hemos hecho cambios significativos en la segunda edicién de Programacién en Linux Al descubierto, El cambio mas inmediato que se puede reconocer es la eliminacidn de los insmeros de linea de los listados de cédigo. Aunque los niimeros de Iinea hacfan referen. ia Facilmente a secciones especificas de c6digo, también hacen dificil verificar el cédigo "en él texto, ‘Hemos reofganizado el material para hacer una presentaciéin ms l6gica. Hemos des- plazado tres capitulos sobre el uso de las bibliotécas, la depuracién y la administracién de errores a Ja Parte J, “El Grupo de herramicntas de programacién de Linux”, Hemos eli- ‘minado el capitulo que cubria Emacs, La Parte Il ha cambiado dé nombre a “intrada, sali- da, archivos y directorios” y hemos colocado en ella todos los temas relacionados con WO. La Parte IIT ha cambiado de nombre a “Procesos y sincronizacién’”. La cobertura de a programacién de pthreads ha crecido y ocupa un capitulo independiente. Hemos aiia- dido un nuevo capitulo de demonios en la Parte Il, El material de la Parte 1V que trata de programacién TCP/IP y de enganche ha cambiado de forma significativa. La seccién del capttulo de documentacién dedicado al uso de las herramientas linuxdoc-SGML se ha reemplazado por material de DocBook. El capitulo que cubre Ia programacién segura ha sido eliminado, como también el apéndice que presetaba una biblioteca de tabla de sim. bolos.'En general, todo el texto se ha aciualizado para reflejar las dltimas versiones de software y bibliotecas que se explican. it i Cémo leer este libro + |- ‘alas Partes Ia VI del libro se pueden leer en cualquier orden. Sin embargo, como | durante todo el libro presuponemos que conoce la wilizacién del compilador, make y | Programacién en Linux Al descubierto Inrropucaon otras herrumientas introducidas, asegrirese de que lee ta Parte Tantes, si acaba de Negar ala» programacién de Linux. Si se siente cémodo en Ia utilizacién de GCC, make, etc., no debe- ria tener problemas en saltar de un lugar a otro. Los capitulos de cada parte son acumulati- vos, asf que es posible que quiera leerlos en orden, Todo el cédigo fuente de este libro podemos obtenerlo en el siguiente sitio web: http://www. pearsoneducacion.cor. Convenciones tipograficas utilizadas ae en este libro El caricter de continuacién de e6digo, %, indica lineas de e6digo o salida que apare- cen en una sola linea en el original pero que debemos dividir para que se ajusten en una pagina del libro. Cuando expl amos Jos pardmetros pasados a comandos, funciones ¥ programas, el texto que aparece entre aves —| }— denota argumentos abligatorios, El texto que apa rece entre corchetes —[]— indica argumentos opcionales. ra mientas eee En Esta Parte Linux y la programacién Linux en contexto Configuracién de un sistema de desarrollo Cémo utilizar el grupo de compilador GNU Administracién de proyectos utilizando make de GNU Como crear software autoconfigurable y portatil Comparacién y fusién de los archivos de cédigo fuente Control de versi6n utilizando RCS y cvs Depuracién Administracién de errores Utilizaci6n de las bibliotecas 37 7 101 119 143 161 185 Linux y la programacion ~- Linux en contexto Linux llega a la mayoria de edad 4 éPor qué programar en Linux? 7 Lo que aprenderemos, capitulo a capitulo 8 Resumen 43 El Grupo de herramientas de programuacién de Linux ° PARTE | i Linux ya no es un juguete para pasar el tiempo. Se ha convertido en un componente esencial para casi todas las intiaestructuras de computaci6n, especialmente para Internet. Si, como escribimos en la primera edicién de este libro, “1998 fue el afio en el que Linux aparecié definitivamente en tas pantallas de radar empresariales de América”, entonces, 1999'fue el afio en que Linux se convirtié en un ciudadano de pleno derecho de la empre- sa América, Mirando hacia adelante, 2000 promete ser el afio en el que Linux se estable- ceri firmemente como componente fundamental de la infraestructura de computaci6n de Internet como un miembro importante de 1a Nueva Economia. Linux llega a la mayoria de edad El mercado de los programadores conocedores de Linux esta en expansidn, especiai- mente en lo que respecta a los programadores de aplicaciones. Esta seccidn describe bre- vemente cémo ha veurrido, Si esta famniliarizado con Ia historia de Linux, es posible que guiera pasar a ta siguiente seeci6n, “;Por qué programar en Linux?” Linux ayer La historia publica de Linux comenz6 con este correo enviado al grupo de noticias Usenet comp.os.minix, escrito en agosto de 1991, por un estudiante de instituto fin- Jandés: Hola a todos 10 que estén utilizando minix- Estoy haciendo un sistema operativo gratuito (es s6lo un hobby, no serdygrande y profesional como gnu) para los clénicos 386(486) AT. Se esté gestando desde Abril, y esta casi preparedo. Me gustaria cualquier informacién sobre cosas que le gustan o disgustan a la gente de minix, ya que mi SO es parecido (1 mismo diseho grafico del sistema de archivos (debido a razones practicas) adem4s de otras cosas). Por supuesto, este estudiante era Linus Torvalds y el “hobby” del que escribfa crecié hasta lo que hoy conocemos como Linux. La versién 1.0 del nticleo fue tanzada el 14 de marzo de 1994. Enue fa 1.0 y ta 2.0, lanzada en junio de 1996, una gran cantidad de esfucrzo fle programacién increment6 drésticamente la funcionalidad bisica del niicleo, el soporte de unidades y, lo mas importante, el intervalo de aplicaciones disponibles. Cuando se lanz6 e! micleo 2.0, habfa un cierto ntimero de tareas que no se podfan realizar uuutizando Linux, ademas de una interfaxz por debajo de Jo ideal (Iéase “como Windows”). Linux y la programacién Linux en contexto Cavinoio 7 La versién de nicleo 2.2, actualmente en uso, fue lanzada oficialmente el 25 de enero de 1999, En el momento en que escribfamos este libro, el nticleo de desarrollo 2.3 estaba en espera. No se inclufan nuevas caracteristicas en él y los esfuerzos de codificacion se dirigian a la resoluci6n de fallos y a la estabilizacién de la base de cédigo del nticleo en anticipacién al lanzamiento de la versién 2.4, Los objetivos de esta versién incluyen un sistema de archivos de publicacién, una granularidad més fina para el subsistema de mul- tiprocesamiento simétrico (SMP) y un soporte mas completo de los esténdares POSIX. Esto es slo parte de Ia lista de mejoras y arreglo de errores. ; Linux entré en 1a conciencia popular en marzo de 1998, cuando Netscape prometié * lanzar el c6digo fuente para su producto de Internet Netscape Communicator bajo una versién modificada de la GPL (General Public License, Licencia Pablica General) del proyecto GNU, En julio del mismo aiio, dos de los fabricantes de bases de datos rela- cionales mas importantes del mundo, Informix y Oracle, anunciaron puertos de Linux nativo de sus productos de bases de datos. En agosto de 1998, entré una seria cantidad de dinero en el mundo de Linux cuando Intel y Netscape tomaron una posiciéa minori- taria en Red Hat, creadora de la que era por entonces la distribucién de Linux lider en el mercado. Mientras tanto, IBM comenz6 a hacer una comprobacién beta de un puer- to Linux de su base de datos insignia, DB/2. Desarrollos como estos continuaron a lo largo del ato. Durante 1999, Linux se convirtié en un adolescente en el mercado de la tecnologia de Ja informacién piincipal. Los principales fabricantes de software y hardware continuaron invirtiendo cn empresas de Linux, seguidos répidamente por capitalistas arriesgados. De forma predecible, la entrada de capital de grandes inversores tuvo como resultado dos ofertas péblicas de acciones de gran envergadura y con mucho éxito con las que Red Hat y VA Linux se convirtieron en las dos primeras empresas Linux piblicas. . Los primeros meses del aio 2000 fueron testigos del anuncio por parte de IBM de que precargaria Linux en sus Iineas de productos de servidor, escritorio y portitiles. De hecho, en abril de 2000, la mayoria de los principales fabricantes de hardware estaban ofreciendo Linux como una opcién en los sistemas de computadoras que vendian. El interés piblico en Linux continia creciendo, y es dificil que pase una semana sin un anuncio relacionado con Linux en la industria de las computadoras. Incluso mas exci- lante ha sido 1a atencién prestada en los medios populares, Linux ya no es un pasa- tiempo. En este tiempo, esa pequefia empresa de Redmond, Microsoft, no se ha quedado quic- ta. Después de que los famosos (0 infames) documentos Halloween de Microsoft salieran a la luz, se sintié impulsada a responder a este sistema operativo naciente. Los documen- tos Halloween eran notas internas de Microsoft que detallaban su andlisis de la amenaza que suponfa Linux para la hegemonta de su mercado, particularmente Ia de su sistema operativo de servidor, Windows NT, y explicaban las opciones para afrontar el desafio. Siguiendo la estrategia definida en los documentos Halloween, Microsoft lanz6 tina cam- paiia FUD (Fear, Uncertainty, and Doubt, Temor, Poca certeza y Duda), que culminaba ido descrédito de los estudios de rendimiento del servidor Minderaft’y*en el. peng absurdamente sesgado informe “Mitos de Linux”. La mayor parte de la comunidad Linux ridict 16 estos esfuerzos y tanos pocos del gran mundo de la computacién se tomaron en serio los pronunciamientos de Microsoft relacionados con Linux o el software de fuente abierta en general, especialmente en lo que resptcta a la conclusién inicial de Microsoft le herrumientas de programacién de Linus ‘sobre el tema de que el estilo de desarrollo de fuente abierta sea superior a los modelos de desarrollo de software tradicionales. No obstante, que Microsoft se sintiera impulsada a ‘introducirsp en técticas FUD contra Linux sugiere que no se cree sus propios anuncios de peu ey Linux hoy Como sistema operativo de servidor, Linux ha madurado. Podemos verlo ejedatando- s¢ en servidores web por toda el mundo y proporciona servicios de archivo e ihipresora ef un niimero creciente de negocios. Se utiliza como plataforma de servidor de correo opcional y como cortafuegos robusto y seguro, Las mentes pensantes de la industria siguen informando de grandes ganancias de Linux en el mercado de servidores de Inter- net (en su mayor parte a expensas de Windows NT y Windows 2000) y prediven que Linux también serd la fuerza dominante en el mercado incrustado, en los también Hama- dos dispositivos de Internet y en los servidores especializados. = ‘También contingan madurando las caracterfsticas a nivel de empresa, como el sopor- te de miultiprocesamiento, soporte de grandes sistemas de archivos y sistemas de archivos de navegaci6n y el clustering iniensivo en computacién y de alta disponibilidad. El micleo 2.2 soporta hasta dieciséis procesadores, frente’a los cuatro del 2.0, El clustering intensivo en computacién permite a los usuarios de Linux crear sistemas de docenas 0 clentos de computadoras personales baratas que, combinadas, aleanzan la velocidad de procesamiento « nivel de supercomputadora de forma muy econémica en comparacién con el coste de, digamos, um Cray, un SGT 0 un Sun. El clustering de alta disponibilidad permite a los sistemas Linux continuar funcionando cuando fallan uno o mas componen- tes vitales, como la energia 0 los discos duros. ‘También en el escritorio continta madurando Linux, El escritorio KDE proporciona un GUI que rivaliza con el Windows de Microsoft en facilidad de uso y configuraci6n. ‘Sin embargo, a diferencia de Windows, KDE es una delgada capa de caramelo en Ja cima de los sisternas operativos robustos y flexibles. La potente inlerfaz de linea de comandos nunca est a més alld de un clic, No existen menos de cuatro paquetes de prociictividad de oficina: Applixware, StarOffice y Koffice, parte del proyecto KDE, estén en activo. Corel ha lanzado su paquete de oficina, WordPerfect Office 2000 para Linux y su propia distribucién Linux, Corel LINUX OS. En Ja cima del gran conjunto de aplicaciones y uti- lidades disponibles para Linux, el nacimiento de aplicaciones de oficina tan completas como Microsoft Office establece a Linux como un competidor vidble para Windows en aspecios de escritorio. Linux y la programactén Linux en contexto {~ CapituLo 1 Linux mafana : . {Hacia dénde se ditige Linux? Linux es extremadamente popular en el espacio de los servidores porque es robusto, estable y tiene capacidad, pero ya va a sobrepasar a ~ Windows en el escritorio debido al continuo desafio de facilidad de uso. En el mercado emergente de las también Hamadas unidades de Internet, como los cortafuegos y los ennutadores, Linux es una promesa, pero todavfa no esté totalmente comprobado. Las versiones menores de Linux estéin incrementando su popularidad en unidades incrusta- y t das, como teléfonos y controladoras de maquinaria, Segtin los fabricantes de Linux como Caldera, Red Hat, VA Linux y Cobalt continiien madurando como empresas pii- blicas, con seguridad desarrollarén sus planes y estrategias de negocios y dirigirdn el - futuro de Linux. se éPor qué programar en Linux? es {Por qué programa la gente en y para Linux? El niimero de respuestas a esta pregun- } ta es probablemente tan alto como el ntimero de personas que programa en y para Linux. Sin embargo, cereemos que la mayorfa de ellas son variaciones de algunas respuestas més. generales. Primero, es divertido, por eso lo hago yo. Segundo, es gratuito. Tercero, es abierto, No hay interfaces escondidas ni funciones 0 aplicaciones sin documentar interfuces de pro- gramacién (API) —ninguna persona u organizacién tiene ventajas en lo que respecta al conocimiento de lo que puede hacer el sistema operativo, ‘Cuarto, si no nos gusta la forma de funcionar de algo, tenemos acceso al eédigo fuen- te para arreglarto, lo que significa que nuestro negocio o trabajo no son cautivos del plan de negocios de otros. Por desgracia, algunos, especialmente los ejecutivos IS, se fijan mucho més en el mantenimiento del software, porque supone mAs costes para un proyec- to y todavia més trabajo para a saturada plantilla IS, Esta actitud deriva de un malenten- dido, la posesién del e6digo fuente no nos obliga a utilizarlo, Las aplicaciones populares, como el servidor web Apache, se desarrollan y mantienen de forma activa, de forma que es posible que el equipo de desarrollo central de un producto proporcione actualizaciones y mejoras necesarias cuando sean solicitadas, El tema es sencillamente que con software gratuito, tenemos acceso al cédigo fuente si lo queremos, Para terminar, y consideramos ésta como la razén més importante, los programadores de Linux son parte de una comunidad especial. En un nivel, todos necesitamos pertenecer a algo, identificarnos con algo. Esto es cierto tanto para los programadores de Windows como para Jos de Linux, y para la gente que se une a las iglesias, clubes y equipos de atle= ‘tismo. En otro nivel més fundamental, Jas barreras para entrar en esta comunidad estén basadas en la habilidad y el talento, no en el dinero, puntos de vista o en quién conoce- mos, Por ejemplo, raramente se persuade a Linus Torvalds para que cambie el niicleo en base 9 argumentos racionales. En lugar de eso, es el trabajo en el e6digo el que le persut de (frecuentemente dice “Enséfiame el cédigo”). No estoy suponiendo ni diciendo que Linux sea una meritocracia. La presencia de alguien en la comunidad esta basada en el cumplimiento de una necesidad comunitaria, Piel | iGirupdide béerantentas de prowramativy dallas PARTE | tanto si es en la escritura de c6digo, en In de documentacién o en Ia ayuda a los,princi- piantes. Lo que ocurre es que hacer cualquiera de estas cosas requiere habilidad, adem&s de deseo de hacerlas. Segiin participamos y nos convertimos en miembros de la comuni- dad de programacién de Linux, descubrimos que es divertido y tiene sentido. Lo creemos. En el aridlisis final, Linux es a la comunidad y a 1a comparticion como a hacer que las omputadoras haga lo que queramos. {Por qué leer Programacién en Linux Al descubierto? Mientras Linux y su nego- cio continuen evolucionando y desarrolkindose, Ia necesidad de gente que programe crecerd, Ya esté s6io aprendiendo a programar o sea un programador con experiencia ero nuevo en Linux, el conjunto de herramientas y técnicas puede ser arrollador. La sola decisién de por donde empezar puede ser dificil. Este libro esta disefiado para usted, Le introduce en las herramientas y técnicas utilizadas normalmente en la progra- macién de Linux, Esperamos sinceramente que su contenido le proporcione una base s6lida en los aspectos pricticos de la programacién Linux. Confiamos en que en el momento en que termine de leerlo, estari preparado para trabajar en Linux por diver- sin y por razones profesionales. sai i inacessu comp: POSE Ns ea esténd i de: p rine fe | i inn 4 iieros rics Ele Lo que aprenderemos, capitulo a capitulo sta seccién resume lo que encontraremos cuando Ieamos Programacién en Linux 24 edicién. Aunque lo hemos escrito para ser lefdo de principio a fin, si es programador experimentado de Linux, sera capaz de dirigirse a un capitulo en particular y encontrar la informacién que necesite para realizar la tarea que tenga entre manos, Linus y la programacién Linux en contexto CapituLo 1 El conjunto de herramientas para la programacion en Linux La primera parte del libro introduce el entorno de la programacién en Linux. Explica algunas de las herramicntas disponibles y eémo utilizatlas. Este gramacién en Linux en ef contexto del fenémeno Linux, El Capitulo 2 explica los problemas de Ja creacién de un sistema de desurrollo, como Ja eleceion del hardware, el equilibrio de rendimiento frente a coste y la creacién dé” un entorno de desarrollo ideal. Aunque, una vez configurado el sistema, no podemos programar en Linux sin saber e6mo utilizar ef compilador, gcc, El Capitulo 3 enseiia a utilizar gcc, incluyendo su sintaxis de Hamada, sus opciones y argumentos de linea de comands y las extensiones GNU para el estiindar ANSI C. En el Capitulo 4 encontraremos el programa make. Cualquier programa que no sea trivial consiste en miiltiples archivos de cédigo fuente y dependencias complejas entre dichos archivos. El Capitulo 4 explica cémo simplificar la administracién de estos pro- yectos de programacién utilizando el programa make, El Capitulo 5 estd dedicado al programa autoconf, una herramienta esencial para los programadores de Linux, autoconf es una herramicnta que nos permite eseribir c6digo fuente que se puede compilar y ejecutar en una amplia variedad de plataformas. Automa- tiza el proceso de configuracién del cédigo fuente para que se compile en cualquier com- binacidn dada de CPU y sistema operativo. La integracién de los cambios en el cédigo fuente de nuestros proyectos de programa- cién es el contenido del Capftulo 6, Parte del proceso de desarrollo consiste en Ja integra- cidn del cédigo, como el arreglo de fallos y los parches, enviados por gente diferente del desarrollador o desarrolladores principales del programa, Los programas diff y patch son Jas herramientas principales para comparar archivos y fundir los cambios en un proyecto. Ensefiamos a seguir la pista de los cambios en el cédigo fuente es el objetivo del Capi- tulo 7. RCS, (Revision Control System, el Sistema de control de revisiones), y CVS, (Conncurrent Versions Sysiem, el Sistema de versiones concurréntes), controlan el acce- so al c6digo fuente, siguen las pistas de sus cambios y administran Ia numeracién de las versiones y el proceso de lanzamiento, Este control es especialmente importante en pro- cesos en los que multiples programadores estén trabajando en la misma base de codigo, porque evita que un programador destruya inadvertidamente el trabajo de otro. En el Capitulo 8 encontramos a gdb, el depurador GNU. Los fallos son un hecho inseparable de la programacién. Este capitulo nos ensefia cémo utilizar el depurador GNU para encontrar y arreglar esos fallos. También vuelve a repasar las caracteristicas del compilador, gcc, que incrementa el proceso de depuracién. De manera parecida, tratar bien con los errores en tiempo de ejecucién también es esencial en la tarea de programacién. El Capitulo 9 se centra en la administracién de erro- res. Todos los buenos programas s¢ deberfan degradar convenientemente cuando se pro- ducen errores. El estindar ANSI C y el niitleo Linux tienen la posibilidad de detectar y responder a condiciones de error inesperadas. Este capitulo nos ensefia las faci administracién de errores disponibles y cémo utilizarlas, El Capitulo 10 explica la utilizacién de las bibliotecas de programacidn y cierra la pri- mera parte del libro. Junto con otras cosas, las bibliotecas de programacién facilitan la apitulo coloca Ja pro: lades de Hee Ae ane red repilidacién del e6digo reuniendo ratings usligndas frecuentements en una gola ubica- eta, haciendo més fil utilizar el misnio e6digo en miltipes proyectos y programas. Sage |e ds cee $80 J atiig quence ' sae cam 435 Entrada, salida, archivos y directorios [La segunda parte del libro sirve para tres proptaios! Primero, proporciona una actuali- ‘zacién'resumida de las bases de las técnicas de programacién de C necesarias en casi todos “Jos programas de Linux, Segundo, y mds importante, nos introduce en los lenguajes estén- dar de programacién en Linux y explica cudindo, por qué y cémo utilizarlos. Para terminar, ‘explice algunos de los conceptos clave subyucentes en la programacién en Linux en general. + Es'raro el programa que no requiere una entrada o generar una salida, E] Capitulo 11 reyisa Jas rotinas E/S esténdar de C y nos muestra cémo utilizar facilidades E/S tradicio- nales de Linux y UNIX. Siguiendo y extendiendo el material del Capitulo 11, el Capitu- Jo. }2 explora la abstraccién de archivos de Linux. Se puede acceder a todo en Linux como eta un archivo,"un concepto clave de Linux. Como el capitulo anterior, éste revisa tutinas de manipulacién de archivos estandar de C y nos ensefia cémo utilizar las funcio- nes para implementar la abstraccién de archivo de Linux que acabamos de mencionar. Pyle ia . - Procesos y sincronizacion ‘La Parte Ii introduce el modelo de proceso de Linux, otro elemento central de la pro- jaci6n en Linux. Cubre ¢l modelo de proceso en s{ mismo, la comunicacién interpro- - £630 y cOmo los procesos obtienen y gestionan los secursos que les asigna el nicleo. aca palabras claras, in proceso es un programa en ejecuci6n. El modelo.de proceso es ‘otto concepto vital de la programacién en Linux: Linux le ofrece al programador mucho ‘més controlfquie Windows sobre cémo, enéndo y en qué entomo se ejecutan los progra- mas. El Capitulo 13 explica este modelo y cme utilizar las facilidades de programacién asociadas con él. El Capitulo 14 extiende Ia explicacién de los procesos con una intro- duccién a la programacién con hilos, Como veremos, la programacién multihilo no es la panacea, ‘pero hay situaciones en las que nos puede ofrecer beneficios significativos. Tembién impone requerimientos de programacién especiales, y aprenderemos cusles son. El Capitulo 15 nos muestra cémo acceder a la informacién del sistema, El mticleo de Linux puede proporcionar a un programador de aplicaciones una gran cantidad de infor- maci6n sobre el sistema en el que se esté ejecutando, el estado-del sistema y las facilida- des!y. servicios disponibles para que los. utilicen los programas. ‘Aprenderemos como obtener y utilizar esta informacién, |. 1 La mayorfa de los programas necesitan asignar memoria de sistema para utilizarla de varias formas, aunque la raz6n es casi siempre proporcionar al programa més flexibilidad ‘en tiempo de ejecucién y evitar limites arbitrarios. El Capitulo 16 examina las posibilida~ des ofrecidas por ANSIC y por el niicleo de Linux para la adniinistracién de la memoria. -En el Capitulo 17 comenzamos a utilizar:la comunicacién interproceso (IPC), un tér- mino utilizado para describir lacomunicacién entre los programas y procesos ejecutén- doge'en el mismo equipo. TPC es el mecanismo que permite « los procesos compartir informacién y recursos. a Line la programactin Lins sn contexto| 4 : Cariruio 1 Completamos nuestra educacién en procesos en el Capitulo 18, donde vemos los demonios, un tipo especial de proceso. Los demonios son procesos que generalmente se ejecutan en segundo plano y esperan que otro proceso o programa solicite algtin tipo de servicio, Aunque no son diffciles de escribir, tienen requerimientos especiales no impues- — tos en los programas a nivel de usuario normales, Programaci6n de red x Podemos concebir las redes como IPC entre equipos separados, en lugar de entre pro- gramas separados en el mismo equipo. Linux tiene funcionalidad intefria de red com- pleta. De hecho, es dificil pensar en Linux sin pensar también en redes, La Parte IV nos introduce en la programacién de red. Es.un tema largo, as{ que el material slo puede ser introductorio, No obstante, lo que aprendamos en estos capitulos nos permitird escribir programas con capacidad de red funcionales y utiles. , El Capitulo 19 ahonda en Ja programacién dé red, deanrrolland ejemplos avanzados que ilustran la programacién TCP/IP y de sockets en una red, is El Capitulo 20 explora el UDP (User Datagram Protocol, protocolo.de datagrama de usuario) y nos muestra cémo programarlo. UDP es un protocolo mAs rapido que TCP por: que no tiene que preocuparse de pérdida de paquetes y no garantiza la entrega: Como resultado, es un protocolo ideal para la programacién de red de ciertas aplicaciones. El Capitulo 21 introduce los sockets multiasignados y el socket E/S de no bloqueo. Los sockets multiasignados se utilizan para crear aplicaciones distribuidas comoel chat y ja videoconferencia. El socket E/S de no bloqueo se.refiere a los sockets B/S que no espe- ran (o bloquean) Ja Jlegada de una entrada a un socket. El no esperar la entrada (0 salida) cg un elemento importante en los programas que necesitan respuesta en tiempo real, como los juegos. Ademés, este capitulo nos muestra cémo construir una biblioteca de clases de (C++ para la programacién de sockets, facilitando Ja tarea de escribir programas que utili- van sockets. fF 2 (art Programacion de la interfaz de usuario... Obviamente, Ia interaccién con él usuario hace posible la computacién’ Linux permite a los programadores interactuar con otros usuarios (y unidades) en diferentes niveles. En. el nivel més bajo, cada pulsacién de tecla puede ser interceptada y el programa decide mo interpretarla. Actualmente, el nivel més alto de interaccién con el usuiario es median- te el sistema X Window. Entre:estos dos extremos, la biblioteca ncurses proporciona una interfaz gréfica para ta consola, es decir, la interfaz de modo texto 6 carfcter, La Parte V explica la programacién de la interfaz de usuario utilizando todos estos métodos, EL témino terminal nos remonta a los printeros dias de UNIX, cuando los usuarios interactuaban con el sistema utilizando un teclado y una impreséra de lirieh (ii teletipo-or. TTY). Alo largo del tiempo, el modelo TTY evolucioné hasta una abstraccién que ence- rraba toda forma de comunicaci6n entre usuarios y unidades como impresoras y:médems. Jncluso nos permite controlar cSmo aparece el texto en una ventana de terminal El Capi- tulo 22 examina el modelo TTY... : ¥ rye d pa Hh las de’ proaimhacidi de Linx 3 inlroduce: ncurses! ncurses (nuevos ‘cursos) fue el GUI original; que vices ie’ manipulacisn det pantalla sofisticadas para terminales de modo ‘Este es:él primero de dos capitulos que nos ensefian cémo programar GUI de sl04E1 Capitulo 24 continua la educacién en ncurses. Aprenderemos cémo uti- eapavidades de ncurses para trabajar con meniis, interactuar con el ratén y utili- i ulatios, 2 Me fa’ mayorta’ ‘de los programas GUI nuevos utilizan el sistema X Window. El Capitu- '198-25'nos introduce en la filosoffa cliente-servidor y en los conceptos que rodean el sis- "ema X Window. También nos muestra cémo utilizar las bibliotecas de programacién X originales, Xiib y Xt! | Half el Capftulo 26; encontramos los aparatos X, Aparats es un trmino genético uti Jizado para definir cosas como los cuadros dé opcién, los botones, las ventanas, las barras de desplazamiento y los cuadros de didlogo: Athena y Motif son las dos bibliotecas de “apiratos mAs populares y conocidas, y reducen de forma significativa la cuntidad de cédi- ‘go que ¢aracteriza generalmente a los programas basados en X: +1()Desplazdndonos o otros conjuntos de herramientas GUI de Linux més familiares, el Capttulo 27 nos muestra eémo utilizar GTK +. GTK+,¢l Conjunto de herramientas Gimp, _» Bs tinajfieva generacién de bibliotecas de aparatos. Originalmente desarrollado para uti- . + Vizairse! en GIME'se ha convertidg.en un conjunto de herramientas muy popular en X (y en,Linux): Es la base del popular entorno de escritorie GNOME. Qt es otro conjunto de “herramientas populat de X y la base de KDE, otro popular entomo de escrtorio, Apren- deremos a utilizar Qt en el Capitulo 28, + yaigbinterés en Ja programaciGn 3D es alto, debido a la popularidad de juegos como la ‘serie. Quake, Ei Capitulo 29 proporciona un breve repaso de la programacién 3D utilizan- i a0) ‘ad Mess la iraplementacién de fuente abierta del conjunto de herramientas de srificos slo fae ‘duda un estindar de facto para los gréficos 3D. aveedd ts ats feds ' ' ASTIN anak tape . Temas especiales Francamest, el Patera dela Pao VI no candy ningsn otro sitio del libro. Aqut aprenderemos sobre la programacién shell'con bash’y los controladores de unidad. bash es el shel! “estindar” de Linux. También es un lenguaje de programacién com: pleto. El, Capitulo 30 explica este lenguaje, una opcisn para la inicializacién del sistema, el apagado u la administracién, Alguna familiaridad con la programacién bash es esen- cial si pretendemos dedicar tiempo a la'utilizacién completa de Linux. 1 Los controladores de unidad son médulos de cédigo que permiten al nécleo (y a los usuarios) interactuar con todo tipo de unidades de hardware. El Capitulo 31 explica cémo escribit los controladores de unidad. | Bako i Fe etsy ‘ ipa Saat cy Toques finales f i Wiis El rntevial do Ta parts final 4 libro ro 86"Explica norchalmente ei ios ited obre + programacién en Linux: el embalaje del software para distribucién, la escritura de la documentacién y la eleccién de la licencia de software adecuada. No obstante, es impor- orn t Linu y la programacién Linu en contexto Cariruto 7 13 tante que sepa cémo preparar su joya de software para el mundo, cémo escribir su docu- mentacién y las implicaciones de Ia licencia que elija. Laadministracisn de paquetes, explica cl Capitulo 32, se refiere a la preparacién de un paquete de software completo, en formato binario o fuente, para Ja distribucién.- Este capitulo explica la herramienta tradicional, tar, la crecientemente popular (y mal Ila- mada) Red Hat Package Manager (RPM) y el sistema de administracién de paquetes Debian. Para los propésitos del Capitulo 33, documentacién se refiere a la documentacién de. usuario; es decir, c6mo utilizar un programa, Frecuentemente pasada por alto y malditay la buena documentacién es un componente esencial de un producto de software com- pleto. “ El material del Capitulo 34, la licencia de software, como la documentaci6n, es fre- cuentemente dejada a un lado. En-el mundo de fuente abierta, Jos programadores son libres de elegir entre una gran Variedad de licencias de software. Este capitulo examina el intervalo de licencias de software disponibles, resalta sus ventajas y sus desventajas y explica c6mo utilizarlas. Sin embargo, no recomienda unas sobre otras, busque consejo en un abogado competente si tiene problemas no resueltos en este texto. Resumen En este capitulo hemos resumido brevemente la historia de Linux, hemos hecho un rapido viaje por el estado actual de Linux y su programacion y hemos eserutado stt futu- ro en la bola de cristal, Ademés, hemos examinado la relacién de Linux con UNIX y se nos hemos fijado de forma filoséfica en por qué podrfamos encontrar atractiva la progra- macién en Linux. Para terminar, hemos resumido lo que creemos que aprenderd al leer este libro. Configuracién: , de un sistema de desarrollo Consideraciones generales La placa madre y la CPU Hardware de interaccién con el usuario: video, sonido, teclados y ratones Dispositivos de comunicacién, puertos y buses a Dispositivos de almacenamiento Periféricos externos Sistemas completos Portatiles Software de desarrollo Resumen 2 26 30 31 33 34 34 36 7B un qundo ideal,cada desaroliador tend, al menos, un sistema dedicado al de- Surrollp de software} La principal ventaja de ‘esto es que, de este modo, podemos volver a ‘nuestro sistema principal si estropeamos inadvertidamente nuestro equipo de desarrollo mientras probamos ese nuevo controlador de dispositive que acabamos de escribir, Este capitulo nos gua a través del a veces desconcertante despliegue de elecciones y habia de Jos muchos problemas que hay que tener en cuenta a la hore de seleccionar el hardware y el software para un sistema de desarrollo, Consideraciones generales La informacién de este capitulo es, necesariamente, algo subjetiva, La eleccién de un sistema, depende en gran manera de lus necesidades y preferencias individuales, Este Sapitulo gerd de mayor utilidad si se lee junto con la compatibilidad de Hardware Linux HOWTO, oe mantiene cl Proyecto de documentacién de Linux. La tltima versién pode- tii ce http://www. linuxdoc.org/HOWTO/Hardware-HOWTO.htm. PEE mos ened 3} 2 La compatibilidad de Hardware HOWTO sirve a dos propésitos. En primer Jugar, enumera una cantidad de dispositivos especificos que son 0 no son soportados, que sim- Plificardn la tarea de crear un sistema de desarrollo, En segundo lugar, HOWTO nos remi- te a otros documentos que nos muestran ain mas hardware soportido y no soportado. Como regia, este capitulo no enumera dispositivos soportados especificos, porque la lista serfa demasiado larga y se quedaria anticuada rpidamente. Menciona ocasionalmente nombres 0 grupos de dispositivos que se sabe fimcionan bien con Linux, Si necesitamgs atin mas informacién, particularmente sobre el hardware soportato, después de leer este capitulo, Linux Online (http:/Avww.linux.org/) mantiene una a Configuracién de un sistema de desarrollo 7 Captruto 2 pagina de Proyectos que tiene muchos enlaces titiles con proyectos de desarrollo impor- tantes, incluyendo algunos para soportar varias clases de dispositivos de hardware. Este capitulo se centra en el hardware que realiza el trabajo y en cémo obtener algo bueno por nuestro dinero en lugar de obtener el sistema més caro disponible. ;Por qué? Algunos lectores pueden tener dificultades econémicas que les impidan comprar la tiltin’a CPU, montones de memoria, un disco duro sorprendentemente rapido y un monitor de 48". Otros quiz prefieran tener dos o més sistemas econdmicos en lugar de una tinica uni- dad cara. En mi caso, he descubierio que desarrollar software en mi SuperMondoMegaEs- pantoso Modelo IT oculta los sintomas del e6digo ineficaz, como requisitos de memoria extremos, ulilizacién de CPU excesivamente pesada 0 una huella de disco gruesi, Como ya sugerimos al principio de! capitulo, existen muchas razones para tener dos islemas, a continuacidn tenemos algunas de ellas Tener un enrutador-firewire separad, cacla vez mis importante a medida que mis usuarios tienen DSL y acceso por cable a Internet, dejando sus sistemas constante- mente expuestos a los malos. + Tener un sistema “fallar y quemar” dedicado, ‘Tener un sistema que inicie miiltiples sistemas operativos o miltiples versiones del mismo sistema para hacer pruebas. + Tener un sistema limpio separado para probar programas de instalaci6n 0 paquetes (RPM 0 Debian) si estamos preparando un paquete para distribucién + Tener un sistema limpio para pruchas de sofiware, Tener un sistema separado para que ulilicen invitados y familia cuando no descemos que compartan nuestro sistema. + Tener al menos un equipo Linux para que actiie como servidor que ejecute Linus las. 24 horas del dia. La mayor parte de los millones de Iineas de cédigo Linux probablemente se desarro- Maron en sistemas més lentos que los sistemas econémicos que se venden actualmente. Sin embargo, si necesita comprar un sistema mas potente que el que sugerimos aqui y tie~ ne recursos cconémicos, mejor para usted. Por consiguiente, las sugerencias de este capi- tulo estén orientadas hacia una estaciGn de trabajo de desarrollo de baja a media. Natu- ralmente, se pueden ajustar estas recomendaciones al alza o a Ja baja segiin convenga. Las actividades de desarrollo biisicas, utilizando las herramientas y técnicas que se des- criben en este libro, raramente requieren CPU muy répidas; la mayoria del desarrollo es E/S intensivas en vez de CPU 0 memoria intensivas (Ia compilacién kernel es una excep- ion a esta afirmacién). Sin embargo, otras aplicaciones que utilicemos (0 estemos des rrollando) pueden hacer demandas adicionales a la CPU y a la memoria. Por ejemplo, la compilacién de programas C++, especialmente los grandes, consume grandes cantidades de potencia de computadora. Asimismo, las aplicaciones multimedia normalmente requie~ ren mas potencia que el ciclo editar —compilar— depurar normal de un desarrollador. Lo mismo ocurre con los juegos de Office comerciales; normalmente necesitan grandes can- tidades de memoria. Un elemento de depuracién de c6digo, que utilice puntos de trazado para revisar variables dando pasos tinicos continuos, consume definitivamente ciclos CPU. Algunas personas recomiendan intentar elegir un sistema que cubra las necesidades de dos 0 Wes afios. Puede que esto no sea una buena idea. Dentro de un afio, el coste de la NUE as th as de programacién de Linux ie Iy garacterfsticas de computadora. que necesitaré probablemente habré bajado ivameate. Por tanto, quiz4 sea mejor comprar lo que necesitamos hoy y esperar al aifo fnup viene para adquirir lo que necesitemos entonces. Otra alternativa mas econé- mica gué 1a compra de un sistema completamente nuevo es actualizar un sistema ya exis- tent’ thedida que pase cl tiempo. Si elegimos la opcién de actualizacida, hay que tener mulcho:cuidado en no comprar componentes patentados 0 nos veremos limitados en la habilidad de escoger|los componentes que cubran nuestras necesidades. =figt Mle tat j Lae see fini a placa a madre y la CPU | [La placa del sistema y, por supuesto,lé CPU son él corazén de eualguier computado- a de Ips caracteristicas més importantes de una placa madre es su factor tipo, su 3 fo ubicaciones de las’caracteristicas clave, Muchos fabricantes, par- ticularmente las iis marcas, utilizan factores tipo patentados, lo que deberfa prohi- birse.' $i compramog una méquina que tiene una placa madre patentada y necesitamos Fegmplazarla debido a una reparaci6n o actualizacién, nos encontraremos con una selec cin limitads (o inexistente) y muy cara. Sin'duda, algunos fabricantes utilizan estos dise- Hage if 4 bajar. los costes de fabricacién al eliminar cables para puertos serie, paralelos y 08 puertos E/S; offos puede que tengan motiyos mAs siniesiros. ~ Las antiguas placas madre de factor tipo AT (0 baby AT) son intercambiables, pero tienen una tarjeta de circuto impreso muy pequefia en la parte posterior de la maquina en Ja ue ‘moiitar los conectores. Los equipos Baby AT s6lo tienen espacios para acomodar el \iecladoy ¥ quizé un conector de ratén, modémo estindar ATX tiene muchas ventajas sobre el AT. Aunque una placa madre ATX es, aproximadamente, del mismo tamafio y forma que una placa madre AT (ambag son mas o menos de] mismo tamatio que una hoja de papel de 8-1/2” por 11”), el disetio! ATX cambia las dimensiones de manera que él borde largo est4 contra la parte tra- sera‘de! a maquina. ‘Otra ventaja del factor tipo ATX es que la caja tiene un fusible rectangular’ esténdar que acomoda inserciones de metal.’A su vez, las inserciones tienen fusibles qué coinciden con los conectores de una place madre en particular, El fusible més trandé es Io suficienfemente grande para acomodar fécilmente los siguientes conectores: vvl# 2 puertos serie, f Ja i ; } puerto paraleto. i eee A + puerto dé teclado. Pilate d puerto de ratén. ‘ be 2 puertos USB: 2 4 Lonector VGA. i Conectores'de audio. ie! ’ iy Adomés, ef facfor tipo ATX aleja Ja CPU y la memoria de ls tarjetas E/S de longitud completa; aunque jalgunos fabricantes atin montan algunos conectores, interos en un Jagar donde interfierén en el fécil acceso al interior de la caja. Podemos encontrar mas informacién sobre! el factor tipo ATX en http:/Avww.teleport.com/~ffsupprt/. Las Figuras 2.1 y 2.2 ilustian la diferencia de disribucién entre las placas madie AT. y ATX. Configuracién de un sistema de desarrollo 9 1 | Carfruno 2 L. : CControlador de teclado Conector de allmentacton hy | |; | \ / F 5 ah ees Ce tae itt 1 ph ro | = 7 » Figura 2.2, Distribucién de la placa madre ATX,’ | SAM a lestran la diferemcta 4 (istributidn de los componenteé principales nbio mids flestaéadd 68 qué’! factor tips ATX ira las ranures de "Y los mueve de maheri que éstén perpendiculares al lado més largo ihenta el numero de fanlitas de expansién que puede soportar una uperigr tend dos putrtos serie, un puerto para- Indo y de ratén PS/2, dos cpnexiones dé interfaz IDE y una cone- cetera; es bastante probable que todo ello funcione bien con Linux. | Pied? tenet pucrtosladicionales integrados que tendrén que ser evaluados por compatibi— i cliyendo USB, SCSI, Ethemet, audio 0 video.) | Bly ' ne aime que estanos uilizandp ua CPU Intel o un procesador compa a } como una CPU AMD 0 Cyrix. La utilizacion de este hardware tienScomo _/ tegulfado un sistematde coste mds bajo que ejecuta una gama més amplia de software y hardware. Hay. otras opciones disponibles, incluyendo Alpha, SPARC, UltraSPARC, MURS Y arauitecturas PowerPC. Visite httpu/ww.linux.org/ si estéinteresado en el ““}. soporte de otras arquitecturas de procesador. | LGYTX YAMD son procesadores compatible’ eon Pentiiim. Existfan algunos proble- mas de corpatlbitied con los procesadores Cyrix y AMD, Pero ya se han resuelto y gcc, - ¢l compilador, tiend ahora optimizaciones adaptadas a los chips AMD. Mucha gente est a favor de las placas madre Socket 7 porque nos permiten la uilizaciGn de procesadores i Thiel, Cyeix y AMD de manera intercambiable. Los chips Pentium Il, Pentium IIL, Xeon ¥,Celeron son considerados como CPU compatibles con Pentium y no plantean ningéin problema especial, | S11 precio ¢s un problema, existen algunos sistemas econdmicos que utiizan el pro- cesndor Cyrix MedlaGX. Los sistemas MediaGX integran la CPU, la caché de procesa. dor, video, audio, conjunto de chips de la placa madre y E/S en dos chips. Uno de los inconvenientes de este esquema es que no se puede reemplazar el MediaGX con otra mar- ca de procesador. Otra desventaja es que el sistema de video utiliza memoria del sistema para las operaciones de video. Este disefio reduce la memoria disponible del sistema y uti- liza parte'del bus entre Ia CPU y la memoria para actualizaciones de pantalla, El reselta. do final es un sistema que és un tercio més lento de lo que esperarfamos baséndonos en la velocidad del procesador, Las venthjas evidentes de los sistemas MediaGX. Son su coste mas bajo y el hecho de que tndos son basicamente iguales desde et Punto de vista det software. Por tanto, si pode- mos hacer que funcione un sistesna MediaGX, todos los dems deberfan funcicnnastambicn. El, soporte ‘de video del MediaGX lo Proporciona SuSE. Visite httpy/wwwsuse.de/ | SUSE/XSUSE_E.html para més informacién sobre los controladores de video MediGX. Configuracién de un sistema de desarrollo - * CapiruLo 2 .. Durante tos dos dltimos afios, mi equipo de desarroljo principal ha sido un procesador Pentium Il ejecuténdose a 266 MHz. A pesar de que la velocidad de los mejores procesa- dores es el triple que la mia, la actualizaci6n del procesador sigue siendo la tiltima de mis Prioridades. Obtendrfa mayores mejoras de rendimiento, peseta a peseta, si afiadiera mas _ RAM o reemplazara el subsistema IDE por un SCSI. BIOS Para una estacién de trabajo bésica, cualquiera de las principales marcas de BIOS (AWARD, AMIBIOS o Phoenix) puede ser suficiente, Algunas AMIBIOS tienen proble- mas que complican la utilizacién de tarjetas E/S que tengan un puente PCT-a-PCI, como |” Jas tarjetas Ethemet de puerto Adaptec Quartet 4. La BIOS AWARD ofrece ‘al usuario mayor control sobre Ia configuracién de la’ placa madre que AMIBIOS 0 Phoenix. Es deseable una BIOS répida, que permite al usuario descargar actualizaciones de BIOS y que es estiindar en la mayorfa de los sistemas modernos, Memoria 2 Sesenta y cuatro MB es razonable para un sistema de desarrollo nommal. Siecidimos no ejecutar el sistema X, Window, quiz podamos pasar con s6lo 8 MB para una maquina Gon un propésito en especial (como un sistema de “fallar y quemar” para la depuracién de os controladores ds dispositivos). El tiempo de compilacién de nicleo es més o menos el mismo, menos de 1,5 minutos, con 32 6 64 MB. En iin sistema con s6lo 8 MB de RAM, los ticimpos de compilacién serén mucho més largos, ' Las aplicaciones multimedia, como los navegadores web, se ejecutan més fécilmente, cuando hay disponible una RAM adecuada, particularmente si nos gusta nayegar pot la ‘Web mientras estamos compilando. Por tanto, es de esperar que el rendimiento sufra un Poco si sdlo tenemos 32 MB. Del mismo modo, si estamos desarrollando aplicaciones que consumen mucha memioria, puede que necesitemos més RAM. Bsta pfigina se ha escrito en un sistema con 32 MB de RAM, pero el sistema de desarrollo Principal de un compajiero tiene diez veces eva cuntidad de memoria para soportar trabajo de inteligencia artificial, Cajas y fuentes de alimentacién £ ‘ No es necesario decir que necesitamos elegir una caja que coincida con el factor tipo de nuestra placa madre y que tenga suficientes bahfas de controlador y vatios para cubrir fuestras necesidades. Sin embargo, observerios que muchos ‘fabricantes volvieron a cam- diar las herramientas de sus Iineas de produccién AT para acomodar la placa madre ATX, Si encargamos una caja AT, podemos recibir el disefio ATX mds modemo dotado con un escudo E/S con fusibles para puertos de ratén y de teclado AT. Es probable que para la mayorfa de las aplicaciones, las cajas Mini-Tower, Mid-Tower 0 Full-Tower séan la elec- ci6n preferida, Puede que para algunas aplicaciones queramos disefios de servidor 0 rack. 21 estamos, cpnstcuyendo un sistema de misi6n critica, hay que tener en cuenta que a8 fueates de'alimentaci6n no restaurardn la energia al sistema después de un corte ede gue, polisa estemos interesados en una fuente de alimentacién miniredun- $6 ligeramente més grandes que una fuente de alimentacién ATX o PS/2 nor- af Fang principales, (high-end), particularmente las cajes de servidor y de Hpe{igdas para acomodar 0 una fete minireduntante o una fuente ATX 0 fi ts C sonido, teclados y ratones uh fier esta seccién son los prin EL bopyite de las tarjetas d video’ los monitores son, en gran parte, una poco'o ningin'esfuerzo para soportar los monitores en Ta con- ‘las dltimas tarjetds dé video a menudo exige' informacién de prsarapt, | detallada. Aunque algunos distribuidores de tarjetas de video estén empe- a ieee ¢specificaciones téenicas para su hardware, ¢ incluso a escribir controla- loreside yideo, Como consecuenciay, generalmente es aconsejable evitar una tar- jet avanzada a menos que confirmemos de antemano que ya existe soporte para ella. Las tarjetas de sonido; como las tarjetas de video, requieren soporte de programacién y docu- mentacida, Los altavoces s6lo necesitan adecuarse para su utilizacién con la tarjeta de sonido misma. }4: Tarjetas de video fle i ‘°W4Sbs6lo necesitamos una consola de modo texto, Ia mayoria dé los adaptadores de ‘video WGA fancionarén bien. Si necesitamos soporte grifico, necesitaremos un adapta- dor VGA soportado por XFrée86, SVGAlib, 0 el soporte de buffér de trama de video genérica'del niicleo. |» “ 1 (KFree86 es una implementaci6n de fuente abierta gratuita del sistema X Window, que ‘es un sistema de ventarias basado en un esténdar abierto que proporciona acceso de viswa-, lizacién a las aplicaciones grificas que se est4n ejecutando en Ia misma méquina o en una red, Normalmente, el soporte XFree86 es necesario, y desde luego conver te, para | Configuracién de un sistema de desarrollo 1 Chuo 2 estucién de trabajo de desarrollo, Para maw informacién sobte el proyecto XPreeks, visite https/www.xfree86.org/, ‘Los controladores para parte del hardware de video nds novedoso se pueden encontrar en httpuwww.suse.de/XSuSE/, SYGAIib es una biblioteca para la visualizacién de graficos a pantalla completa en la * consola, Se utiliza principalmente pura unos cuantos juegos y aplicaciones de visualiza- cidn de imagenes, la mayor parte de las cuales tienen versiones del sistema X Windows o equivalentes, Por desgracia, Is aplicaciones SVGAItb necesitan privilegios de rafz para jeceder al hardware de video, por lo que normalmente son SUID instalados, lo que erea problemas de seguridad potenciales. nel OpenGL (y su predecesor GL) ha sido desde hace tiempo el esténdar de facto para los Brdficos 3D. OpenGL proporciona una API (Application Programming Interface, Interfaz de programacién de Aplicacién), abierta pero, hasta hace poco, no ofrecfa una implemen- tocién de referencia abiertay gratuita. Silicon Graphics (SGl), los creadores de OpenGL, Shunciaron en febrero de 2000 que Janzarian OpenGL. bajo una licencia de fuente sblerta, Se espera que esto resulte en un soporte de hardware mejor en més tarjetas de vileo para cl OpenGL estndat, Hasta el anuncio de SGI, los programadores de Linux que necesita, ban gréficos OpehGL. utilizaban Mesa, una implementacién de fuente abieria de OpetiGL Que se ejectita bajo Linux y muchas otras plataformas, La aceleracién de hardware esta disponible para las tarjetas basadas en 3DEx Voodoo. Para mas informiieién sobre Mesa, visite http:/www.mesa3d.org/. Metrolink ofrece una implementacién OpenGL!'con’ licencia Como producto comercial; visite httpv/www.metrolink.com/opengl/ para més informacién, EI nécleo mismo proporciona soporte para dispositivos de video de buffer de tiama. EL dispositive dé suffer de trarba crea una interfaz de programacién que sirve a dos pro-) Pésitos. En primer lugar, permite a los programadores escribir el mistno cddigo de video para ejeeutarlo en mittiples arquitecturas de procesador, porque Ia APT es la misma y el comasdor del nucleo manipula el hardware subyacente. El c6digo del buffer de tramna también se basa'en el esténdar de video VESA, presumiblemente, éualguier tarjeta de video compatible con VESA puede programarse para que se comporte de manera idénti- ca, si tanto el fabricante como el programador siguen el estindar. Para mas informacion sobre cl video de buffer de trama, véase el Framebuffer HOWTO en http:/Awww.taha- Hah clara.co.uk/programming/_Framebuffer-HOWTO-1.1.html. En plataformes Intel y compatibles con Intel, vesafb ofrece soporte de dlispositivo de buffer de trama para VESA 2. Por desgtacia, tenemos que seleccionar el modo grifico que queremos utilizar en tiempo de inicio y, si queremos cambiarlo, tenemos que reiniciar y seleccionar un nue. vo modo. ;Por qué? La éspecificacién VESA no permite el cambio de modos de video cuando la CPU esté en modo protegido, que es el modo en el que se ejecuta el miicles Linux. BI tinico momenio en que no funciona en modo protegido'es cuando se arranoa, ais Salil i Er hlescor AMM astdlla Wiig ua if plait a i bil ‘yay (24 esate | } | GER fi lex # ae ' i i We Ut iti i de hertdmientas de programacién de Linux "8 AGR (Acéelefated Graphics Port, Puerto de Avslerocién de Graficos), proporciona el : >ckSador Con una conexidn a la memoria de video que es unas cuatro veces la velocidad det "bes PCL'y ofsece el acélerador de video con un acceso més rapido a los mapas de textura {os en-Ia| memoria del sistema, XFree86 soporta I. mayorta de los grificos AGP. Pease “" Hay que elegir una tarjeta de video con tl menos 4 MB de memoria de video para soportar 1280x1024 16 bpp (2.6 MB). Necesitaremos 8 MB para soportar 1600x1200 a 32 bpp. Algunos juegos 3D podrfan beneficiarse de la memoria extra para los mapas de texturas u otras caracteristicas si son capaces de utilizarla, El servidion X mismo utiliza luna pequefia cantidad de memoria para mantener una caché de fuente y para expandir los mapas de bits. = Tainbién ‘querremos mis RAM de video si configuramos una pantalla virtual, una VisualizaciGn mayor que lo que puede mosirar la pantalla fisica en un momento (la panta- Mla fisica avanza alrededor de la pantalla virtual cuando maovemos el cursor hacia el bor- d) El servidor X también puede utilizar Ia memoria del sistema como memoria auxilise Fats memoria ¢§ en Ia que X vuelve a dibujar ventanas parcialmente ocultas para poder Visualizarlas mas répidamente cuando se descubran. Si utlizames we pantalla de alta reseluci6n o de profundidadsde pixel (16 bpp 0 32 bpp), hay que tener en cuenta que la ‘memoria auxiliar coloeara las peticiones adicionales en la memoria del sisteme Existen distintas ventajas en la instalacin de una tarjeta de video que soporte una Brat fesolucién y profundidad de pixel ea nuestro sistema Linux, Linux puede manipular {icilmente muchos procesos diferentes la vez, asi que querremos tener suficiemte pantalla ara visualizar miltiples ventanas. Una tarjeta de video que soporte una resolucién de 1280x1024 sera suficiente, La otra ventaja de ten er uid buena ltjeta de video es la pro- fundidad de pixel. No es sélo que los administradores de ventunas mas nueves traby ajen ‘mejor con tna buena profindidad de pixel, sino que también es muy ttl si queremos uti- lizar nuystro sistema para trabajos grificos, Naturalmente, nuestro monitor tiene que poder soportar la resoluciGn que produzca la tarjeta de video o no podremos aprovechar al méximo las capacidades de la misma, Antes de comprar una nueva tarjeta grifica, asegurémonos de que seri soportada comprobando tas listas de compatibilidad de hardware de Linux, Monitores Casi cualquier monitor que sea compatible con nuestra tarjeta de video puede ser per- Suadido para funcionar con Linux si conocemos tres mimeros clave: sus indices de rege- } i Configuracién de un sistema de desarrollo. - Caphruto 2 nenucidn vertical y horizontal y st ancho de bands de video. Ohservemos que lo mis grande no siempre es lo mejor; lo que importa es cusintos pixeles podemos poner en pin= talla sin sacrificar fa calidad. Por ejemplo, un monitor de 17” econdmice puede visua- lizar més puntos por pulgada en la pantalla que un monitor de 20” de una estacién de. trabajo caro. Si tenemos problemas para enfocar de cerca o queremos sentarnos muy lejos del monitor, puede que necesitemos un monitor grande, pero si no es asi, un monitor de una calidad inferior, més cerca de nuesiros ojos, puede darnos una calidad igual o mejor {Lun precio més bajo. Como ya sugerimos al final de fa seccién anterior, Ia eleccién del monitor y de la tar- jeta de video estén muy relacionadas. Es una buena idea probar Ja claridad del monitor ‘elegido. Uno de los principales factores de Ja claridad de un monitor es su tamafio de pun- to, el espacio entre pixeles, Cuanto més pequeiio sea el tamafio de punto, mejor. Sin“ embargo, a menudo, los valores de tamafio de punto mas pequefios implican precios més altos, La claridad del monitor también depende de la tarjeta de video, Un monitor probado con diferentes tarjetas de video puede producir una calidad de imagen en pantalla sor- prendentemente diferente. Una tarjeta de video mis dirigida a una wiilizacién empresarial (Como una Matrox Millenium G200) con frecuencia produciré una imagen més nftida que una tarjeta de video para juegos (como Diamond V550). ¢Por qué? Las tarjetas de video normalmente se optimizan para una buena imagen 2D, 3D 0 texto nitido, pero raramente para las tres cosas, i [ \Conseio Ha ; f Ha Nh i ‘néeaméndamod @ funclonamients del monitor 9 no mend de (72 He, ae : | rediceel parpadeo perceptbié de la pantalla, gué se ae Tpvista Ademds [Pay que tener en cients que, deliberadamente, algunos moni es hacen qué la imagen se mueva por la pantalla levemente, a un ritmo muy bejo, para evir | | tar quemarse: siempre que el movimiento sea mus Tent sera imperceptible * Hg, tar ere " Pencarian: eth “(nuestros movimnientos de calieza serdn probablemente mucho! maydres), 00 iB Hoe en Ra fa ey La flexibilidad de la configuraci6n de video de Linux nos ofrece una libertad consi- derable en la cleccién del hardware. Sin embargo, recordemos que vamos a pasar mucho tiempo mirando al monitor, asf que no nos conformemos con mercanefa de segunda en este area, Tarjetas de sonido Linux soporta distintas tarjetas de sonido, particularmente las compatibles con Sound- Blaster (pero no todas las tarjetas de sonido que afirman ser compatibles lo son, algunas uti- lizan emulacién asistida por software), antiguas tarjetas ESS basadas en chips (688 y 1688), Jarjetas basadas en Microsoft Sound System y muchas tarjetas basadas en Crystal (Cirrus Logic). Consulte el documento HOWTO de compatibilidad de hardware de Linux, el sitio 25 {Technologies en httpu/www.4front-tech.coms o las fuentes del micleo inux'(navegable'en Internet en http/metalab.unc.edu/_linux-source/) para més i816n24Front Technologies vende un paquete que incluye controladores de sonido \Wchas tarjetas que los controladores de micleo no admiten. La mayorfa de las tarjetas |sonido nuevas parecen dispositivos PnP. El soporte para las tarjetas PnP est disponible cute Jas utilidades ISAPnP de las que hablaremos m&s adelante en este capitulo. Los adores 4Ffont también tienen excelente soporte para las tarjetas de sonido PnP. y Ratones winnt i ; 'y ratones USB, aitnque funcionales, no son recomendables esta vez: véa- Firewire (IEEE 1394)” més adelante en este capitulo para obtener mis deta- 8 teclados que se conectan a un puerto de teclado estindar AT o de estilo PS/2 fuicidnar bien, aunque es posible que. algunas de las caracteristicas extra de cladds rio funcionen.' i sitivos de indicacién Trackball, Glidepoint y Trackpad qué sé incorporan al lormalienie ticnen una conexién separada 2 un puerta de ratéi'serie.o PS/2 y condiderarse como dispdsitivos de ratén separados cuando se estén considerando oblemias'dé soporte de software. Los ratones serie o PS/2 normales son soportados; inelyénido aquéilos que hablan protocols Microsoft, Mouse Systems o Logitech. El ‘soporte de ratén para la consola lo proporciona el programa gpm y el servidor X para el sistema X Window. | ‘ +}, Muchos otros dispositivos de indicacién, como Ias bolas rastreadoras (trackballs), be oe. Frackpads, funcionarén si emulan a un ratén normal utilizando el mismo omunicaciones. Aunque de nuevo, puede que algunas caracterfsticas espe~ chp i frackpads infs modernos, como la entrada de pluma y la manipulacién especial * de las Aréas de los borides, ro funcionen. La mayorfa de las aplicaciones X requieren un ratén de ires botone’, pero tanto gpm como el servidor X pueden configurarse para emu- tn extra central sintonizando ambos botones en un ratén de dos botones. degra : yb Esta secciGn contiene informacién sobre yatios dispositivos que ofrecen canales de comunicacién, Estos canales pueden utilizarse para comunicarse con otras computadoras y con periféricos,internos y externos. ut Aut se incluyen los buses de alta velocidad que conectan as tarjetas de expansién con el procesador. No cubbriremos en detalle ni‘el bus ISA ni el PCI, las tarjetas ISA y PCT sencillas funcionan bien siempre que exista un controlador que soporte la tarjeta en cucs- tién Los dispositivos Plug and Play ISA y las tarjetas PCMCIA se explican de manera separada, porque implican consideraciones especiales La mayorfa de los controladores IDE funcionarén, particularmente aquéllos conectados a Jas unidades de disco IDE; para | Captruvo 2 otros dispositivos IDE, como las unidades de cinta, véase “Pispositivos de, almacena- miento” més adelante en este capitulo. Los dispositivos conectados s un puerto paraleto, Como las unidades Zip y las impresoras, se explican en categorfas separadas, Modems 1 Lit mayorfa de los médems funcionardn bien con Linux. Una importante excepci6n a sta afirmacién son los lamados WinModems. Los Wintfedems son médems que utilizan 'a Interfax de Protocolo Rockwell (Rockwell Protocol Interface, RPI) patentada o que dependen de tun componente de software para su funcionalidad, Por otra parte, existe ina gran diferencia entre los médems profesionales mas caros que wtilizan los proveedores de * servicios de Intemet y los médems a nivel de consumidor mis econémicos, Casi cual quier médem responderé bien con lineas telefénicas de buena calidad, pero en lineas de baja calidad la diferencia serd mds significativa, Por eso es por lo que se pueden Ver usua rios en Internet que estin encantados y otros extremadamente insatisfechos con los mis- mos médems baratos. Se requiere mucha mas microprogramacién, sofist ibid Vitti. veces Ia potencia de proceso para recuperar datos de una conexi6n de baja villdlid i la que hace falta para recuperar datos de una buena conexién, i Probablemente; los desazrolladores serios querrén una conexi6n a Intévhet-dedicada Para su oficina o para su casa. Algunos médems mds caros pueden funcionar cont una Mipea arrendada, Esto nos permite crear una conexién a Internet con una line arrendada de 33.6 Kbps dedicada (permanente) en un citeuito en seco de dos cables (1 pat) no com. dicionado, Esto pucde ser muy prictico si ISDN y xDSL no estin disponibles en nuestra Zona, Un circuito en seco es'una linea telefénica arrendada sin voltaje de linea sefal de Hamada, ni tono, que conecta permanentemente dos localizaciones. A veces se le ama, “par de alarmas antirrobo”, Estas Ifneas son muy econémicas Para distancias cortas, Por Gesgracia, la persona media que trabaja en una oficina comercial d¢ una compaiia telef6. nici no tiene ni ilea de lo que significan estos férminos, Espere Pagar $200 o mis por un méddem que soporte cireuitos en seco, els init s Las probabilidades de encontrar un par de médems de linea arrendada que funcionen 8 6 K no son muchas, porque s6lo los médems'con una interfuz de linea tlefnica digi, tal tendrdn el software para manipular el odode respuesta de 56 K, También es posible cjecutar DSL en un citcuito en seco con una distancia relativameate cotta, aunque la intencién es que xDSL se utilice con uno de 1$ médems ubicados en Ia oficina central. MVL, una vatiante de DSL, funciona mejor ei ineas mas largas y proporciona un tendi. inicnto de768 Kbps en el circuito, Ea algunay drens, est eucsta unos $13,000 por 16 lines 38 y el cquipo raramente esté disponible cn coffiguraciones que sean econdmicamente viables para una cantidad pequefa de Iineas. Si podemos repartir el coste por muchas Ifne- 85, DSL ey muy econémico comparade con Jus linews ISDN 0 'T Si queremos admitir conexiones de 56 K entrantes, necesitaremos un médem con una interfaz de linea telefonica digital. Normalmente, los ISP utilizan organizaderes de médem caros con una interfaz de linen T| para este propésito, Obviamente, ento s6lo es Prictico si soportamos docenas de lineas. Podriamos encontrar un médem: que funcione Sono nédem ordinasio y como adaptador de terminal ISDN que pueda producir module, cci6n en modo de respuesta de 56 K en una linea ISDN. aside programiacién de Linux: e'interfaz de red fragt 1 a tag" d& Ted asadas ent cl conjunts| dé'chigs “Tulip estén considerdda ‘por niiichés'Goriio la mejor elecciGn para una tarjeta Ethemiet besada en PCT en un sisterma Linux: Son bastante econémicas, ripidas, fiables y bien documentadas, Sin embargo, durante finales de 1998 y parte de 1999, se hicieron frecuentes revisiones, amenudo levé- mente incompatibles, a los chips més nuevos. Los chips més antiguos, que eran una elec- idn iid’ segura, fuéron suspendidos (esto se estd corrigiendo) y la linea se vendié a Intel, FeBultaiidb en iiaa escasez de tarjetas, Parece que estos problemas ya se han resuelto, pero hay qle'tstar alerta si se compran tarjetas basadas en Tulip antiguas, $i necesitamos mal. tiples intesfaices Ethernet en una sola maquina, las tarjetas Adaptec Quartet nos ofrecen Guatro iiertos Ethernet Basados en Tulip en vna sola maquina, ‘# Paia'una taijetn‘de 10 MB/s ISA econémica, los clones NE2000 baratos normalmen- t€ fungiondn bien. Bstas tarjetas paran la CPU un poco més que otros conjuntos de chips fli hot de tratisférir datos, pero pueden de operar a toda velocidad de cable. Sin embar-' 0}|nd hhay que esperar obtcrier velocidad de cable completa en una conexién TCP tinica, como lufia trarisferericia PTP, necesitaremos varias conexiones simultineas para conseguir 3 ancho Ge banda,! es (; 39m soporta sus placas Ethemet bujo Linux y Crystal (Cirrus Logic) ofrece contro: bade ‘Linux para gus chips de controladores Ethemet. Los principales fabricantes de tar- Jetas de Red de Arca Extensa (Wide Area Network, WAN) proporcionan controladores Linux; incluyendo SDL, Emerging Technologies y ‘Sangoma. ats pol : Sh | " SC "Limi admit 1a mayorfa de los controladores SCSI, incluyendo muchos controladores RAID, adaptadores els host, casi todos los discos SCSI, la mayor parte de las unidades de cin- ta SCSI y muchos escéneres SCSI. Algunos adaptadores de host basados en Puertos parale- los son excepciones importantes, Advansys soporta sus adaptadores SCSI bajo Linux; los controladores que vienen con cl micleo fueron suministrados por Advansys. El controlador Tomega Jaz Jet PCI SCSI, que puede estar disponible en minoristas locales, es en realidad un controlador Advansys y est muy bien de precio. Es una buena idea no mezclar unidades de 4jsco y dispositives lentos, como las unidades de cinta o escéneres, en el mismo hus SCSI a ‘menos que el controlador (y su controlador) y todos los dispositivos lentos del bus soporten luna caracteristica conocida como “desconectar-reconectar”; es bastante molesto tener colga- do todo el sistema durante 30 segundos 0 mAs mientras la cinta se rebobina o el carro del escdiner segresa. E] HOWTO de SCSI tiene mis informacién sobre desconectar-reconectar: i ae 2 ne ating i ie Alb : eh HI a | i wae ‘1 jparticularmente aquélios' eee oni les cohtrolaroresises), barat t Intefruipciones. Esas tarjetas normalmente vienen con e: hws Configuracién de un istema de desarrollo CavtruLe 2 USB y Firewire (IEEE 1394) El soporte USB y Firewire esté en fase de desarrollo. El soporte USB lo proporeiona un paquete Hamado UUSBD. Es posible utilizar un ratén USB si tenemos un controlador” USB soportado, pero necesitaremos descargar ¢ instalar el e6digo antes de poder ejecutar X. Solo un selecto, aunque en aumento, nfimero de teclados USB funcionaban en el momento en que se escribi6 este capitulo. El soporte USB generalizado est programado para le niicleo 2.4, que puede que ya haya salido para cuando lea este libro. Mientras tan: to, limitémonos a las interfaces més antiguas (serie, paralela y PS/2) excepto para los ajustes (ja menos, claro, que decidamos trabajar con soporte USB o Firewire!). Tarjetas serie Los puertos serie de PC esténdar son soportados, incorporados o no en la placa madre. No recomendamos disefios muy antiguos que no tengan un UART 16550A o compatible, porquie son mas lentos y tienen buffers de entrada mucho més pequeiios. Por suerte, aho- Ta son bastante escasos. El fabricante soporta con frecuencia la mayoria de las tarjetas serie multipuerto inte: Jigentes. Cyclades, Equinox, Digi y GTEK son algunas de las compafifas que soportan su placas multipuerto bajo Linux. Equinox también hace una interesante variacién de ui taultiplexor de puerto serie que soporta 16 médems ISA (0 tarjetas que para fa computa- dora son exactamente como médems) en un chasis externo, ‘umbién funcionan la mayorfa de las tarjetas multipuertes serie sin procesamiento propio, pero hay que tener cuidado al intentar poner demasiados puertos sin procesa- micnto en un sistema, « menos que éste y/o los puertos estén poco cargedos, Byterunner (http/www.byterunner.com) también soporta sus tarjetas de puerto 2/4/8 econdémi- cas bajo Linux, Las tarjetas Byterunner estén a buen precio y son tinicas: a diferencia de muchas pltcas multipuertos sin procesamiento, son altamente configurables, pueden compartir interrupciones y soportan todas las sefiales de asentimiento normales, IRDA El soporte de Linux de dispositivos de protocolo IRDA (Infrared Data Association, Aso- ciacién de Datos Infrared) es bastante nucvo, asf que hay que estar’ preparado para soriear problemas. El Linux 2.2 Kemel incluye soporte IRDA, pero atin necesitaremos el paquete irda-utils, disponible en la pagina del proyecto IRDA en http/Awww.cs.uit.no/linux-irda/. Tarjetas PCMCIA El soporte PCMCIA (también conocida como CardBus) de Linux existe desde hace tun tiempo y es bastante estable, Ser necesario que exista un controlador para que se uti- lice el dispositivo en purticular. Si un dispositive que necesitamos utilizar no esté en el; 29 ninemsn va | tbr hientds de programacion le Lir i ' o/ Config de los discos dé instalucién de nuestra distribucién Ligiux; i6n podria ser diftcil, ja bY 1 bn EL Na at ISA Flug and Play ns rely pat . Vi soporte de ISA Plug and Play (ISAPnP) ha madurado considerablemente on el ‘ailelgo 2.2.14. Sin.embargo, tradicionalmente, el soporte de PnP bajo Linux lo suminie- {ran Jas utlidades ISAPaP. Al contrario de lo que podriamos esperar por el nombre Plug and Fay, estas utilidades no operan de manera automatics. Las buenas noticias son que este {‘defecto” elimina el impredecible comportamiento variable de lo que, con frecuen- cia y mas. apropiadamente, se llama “Plug and Pray” (Enchufar y Tezar), Para utilizar ISAPnP, hay que ejecutar pnpdump para ercar wn archivo de confic Buraci6n muestra. Contendr las distintas configucaciones posibles para cada pieza de hard y rae nP dg Ruestro sistema. Después, hay que editar manualmente el archivo de sonfig y racién para seleccionar una configuraci6n en particular, Evite PoP para los dispo- = HIVOs dF sean nepesarios para arrancar el sistema, como ls controladores de disco y las tarjetas de red (para las maquinas que arrancan de la red). Lie sg p ispositivos de almacenamiento < Linux soporta varios dispositivos de almacenamiento comiinmente utilizados en el thércado informatico de consumo. También existe soporte para dispositivos a nivel de empresa, Como bibliotecas de cintas y matrices RAID masivas. Los dispositivos para el consumidor soportados incluyen casi todas las unidades de disco duro y medios deemon- fables como Zip, CD-ROM/DVD y unidades de cinta, Discos duros VirtyjImente, todas las unidades de disco IDE, EIDE y SCSI se admiten bajo Linux, Linux In¢luso seporta algunos antiguos controladores STS06 y SDL, También se sopor- ‘an las uhidades PCMCIA, Se soportan muchas configuraciones RAID (Redundant ‘Array of Inexpensive Disks, Matriz Redundante de Discos Econémicos) de software y hardwa- ¥e para proporcionar rapidez, tolerancia de errores y/o cantidades muy grandes de alma, cenamiento de diseo. Discos desmontables | ‘Nersiones mds recientes del nicleo Linux soportan medios desmontables incluyendo Jaz, LS120, Zip y otras unidades. La uiilizacién de estas unidades como dispositiver de pends Puede ser problemética, pero son excelentes medios de almacenamiento a largo plazo, Configuracién de un sistema de desarrollo ” CaPiruLo 2 CD-ROM-DVD ( Casi todas Jas unidades de CD-ROM funcionarén para los datos, incluyendo IDE, f SCSI ¢ incluso muchas unidades de interfaz patentadas antiguas. También funciona algunas unidades de puerto paralelo, pasticularmente las unidades Microsolutions Back- ) pack. Algunas unidades no pueden utilizarse como aparatos de CD de audio debido a la ( falta de cstandarizaci6n de la funcionulidad de audio. Atin menos unidades podrin recu- perar el audio del libro rojo, que nos remite a leer los datos de audio digitales directa- mente de un CD de audio en la computadora para posterior duplicacién, procesamiento 0 transmisién. Linux soporta muchos cargadores de CD, El comando eject tiene una opcién para i seleccionar discos individuales en un cargador. La grabacién de discos de CD-R y CD” RW se Hleva a cabo utilizando el programa cdrecord. La lista de compatibilidades del UNIX CD-Writer en http:/Avww.guug.de:8080/cgi-bin/winni/isc.pl contiene mas ) informacién sobre qué dispositivos son compatibles, Quedamos avisados de que debido a ‘ las limitaciones tecnolégicas de las unidades de CD-R, es mejor escribir CD en maquinas poco cargadas, o mejor, en méquinas dedicadas. Incluso una breve interrupcién en el flu- jo de datos los destruiré. Hay froniales GUI disponibles para quemar CD, incluyendo \ BurniT y xcdroast. - Copias de seguridad en cinta : ) Linux soporta una amplia variedad de dispositivos de copias dé seguridad en cinta y otros tipos de medios desmontables. Linux tiene controladores para SCSI, ATAPI (IDE), QUC, disquete y algunas interfaces de puerto paralelo, La solucién preferida son las uni- dades DAT (Digital Audio Tape, Cinta de Audio Digital) SCSI, aunque pueden costar tan- 1 tocomo un PC barato, porque Its soluciones DAT almacenan grandes eantidades de datos ho y son muy rpidas. fe olen i hee | Periféricos externos ( Los dispositivos de los que hablamos en esta seecisn son periféricos opcionales , nor- malmente instalados fuera de la caja del sistema, Generalmente, los controladores de estos dispositivos se ejecutan en espacio de usuario; es decir, fuera del micleo y sin nin- giin permiso o privilegio especial, en lugar de en el espacio del niicleo, ied HLaaaRRE RC) He EL Ory a herramienis da progra ARTEL impresoras eos iSitigne unafimpresora PostScript genuina, puede saltarse: esta secci6n, porque Linux y las” || ellgasiqnes Linux soportan PostScript de manera innata, Por otra parte, si forma parte de la ' desafortunada mayorfa que no posce una impresora PostScript genuina, puede encontrar su ' soporte de impresora Linux en el paquete Ghostscript (httpy//www.ghostscript.com/). El "Soporte part las impresoras Canon es pobre, porque Canon nunca ha estado dispuesta a poner 4a documentacign técnica a disposicion de nadie, Se soportan la mayorfa de las impresoras IP (y aguéllas que las emulan). También se soportan bien las impresoras Epson. Para ver una lista completa de las impresoras que soporta Ghostscript, escriba uname ‘en Ia Ifnea de comandos. gs mostrard amablemente una larga lista de impresoras y dispo- sitivos dé sulida soportados. . 2 \ Laslimpresoras Canon BIC-S000, Canon BJC-7000 las HP basadas en PPA son el equlivalente en impresora de los winmodems ya que carecen de fuentes incorporadas y de |i! motor ce entramado de hardware; estas impresoras dependen de la CPU de la compu “thdora‘host park’su ejecucién, Sin embargo, esto no es un problema para'los sistemas | Linux, porque normalmente se utitiza Ghostscript como entramador y las fuentes incor- poradas y otras caracteristicas no se utilizan, ~ 2 Peberfan evitarse las HP720, HP820Cse y HP1O00 porque no tienen CPU y manipulan et puerto poralelo de un modo no estindar, aunque inofensivo, way. Podrfan set soportadas al- Bunas impresoras de chorro de tinta Lexmark, pero muchas otras son impresoras s6lo para -, Windows. Sin embargo, la impresora liset Lexmark Optra R-+ con una interfaz Ethemet fun- cciona bien Con Linux, Su microprogramacién, cl software incorporado en su hardware, sopor- tael proiocolo LPD, por tanto, es sencillo configurarla como un dispositive LPD remoto, » Ghdstscript puede ejecutarse en casi todos los sistemas operativos que se ejecuten en {un hardware con suficientes recursos para funcionar como entramador, Un fnivo contre. Jador Ghostscript ¢s suficiente para soportar una impresora en, virtualmente, todas las Computadoras, incluyendo aquéilas que ejecuten todos los sistemas operativos compati- bles con UNIX-; MacOS, 05/2, Windows 3.1, Windows 95, Windows 98, Windows NT ¥ muchos otros, Ghostscript puede coexistir, eemplazas, o ser ya el entramador de impre- si6n nativo (si es que hay alguno) de estos sistemas operativos y puede integrarse con los subsistemas de impresién de casi todos los sistemas mencionados, Escaneres EI soporte de escdneres es un poco escaso, aunque el paquete SANE (Scanner Access Now Easy, Ficil Acceso a Escéner) soporta cerca de 100 modelos diferentes de un par de Configuracién de un sistema de desarrollo 33 1 - : Carirui0 2 docenas de fabricantes. En general, la falta de soporte es responsabilidad de los fabrican- 7 tes de escdneres: no suministran controludores y no revelan la documentacién técnica necesaria para programar sus escéneres. Camaras digitales Existen programas para manipular muchas cémaras digitales de mano que se ejecuta- —* rin en Linux. Las camaras que soportan flash compacto o almacenamiento en disquete de imagenes JPEG estandar deberfan funcionar también utilizando esos medios para transfe- rir los datos de imagen. Una nueva aplicacién llamada gPhoto soporta unas diez marcas diferentes de cémaras digitales. Algunas cémaras digitales pueden también ser soportadas” bajo la biblioteca SANE. + Ademds, los controladores de software de una variedad de Frame Grabbers, sintoni- zadores de TV y las populares camaras Quickcam estén disponibles en Intemet. Consul- ! te la relevante seccién del HOWTO de Compalibilidad de Hardware: para informarse | sobre Jos enlaces a estos recursos. ' Automatizacion del usuario 4 | te Seguro que apreciard el siguiente artilugio, porque puede utilizarse para controlar el mundo real y funciona bajo Linux. Existen un par de programas para controlar el médulo de interfaz de computadora X10 CMIIA (normalmente vendido como parte del equipo CKIIA). El sistema X10 envia sefales actuales portadoras a través de las Iineas de nuestra casa u oficina para controlar una variedad de médutos que encienden o apagan dispositivos individuales. El protocolo actual portador X10 esté patentado, pero bien documentadto; 1a documentacién de la interfaz de computadora esta disponible en Internet: Sistemas completos Hay un cierto ntimero de compaiifas especializadas en sistemas Linux preinstalados, VA Linux Systems y Linux Hardware Solutions son dos distribuidoras muy conocidas. Podemos encontrar una lista més completa de Jos distribuidores que venden sistemas completes de Linux en http/www.linux.org/vendorsisystems.html. | | Rebel.com (httpviwww.rebel.com/) adquirié la divisién Netwinder de Corel y ahora vende una amplia gama de sistemas servidor y escritorio busados en Linux que 'se basan en la CPU StrongARM. Son sistemas bastante econdmicos dirigidos al escaso mer- cado de cliente y servidor web, pero son ungs sistemas de desarrollo ideales. Cobalt Net- works ofrece Qube, un dispositivo servidor basado en Linux en un paquete compacto que utiliza un procesador MIPS. Silicon Graphics también ofrece modelos selectos de sus estaciones de trabajo con Linux preinstalado. i Algunas de las principales compafifas de PC, incluyendo Dell, IBM, Hewlett Packard. y Compaq, estén ahora, o1o estarén pronto, precargando algunas de sus estaciones de tra- i wait le wel un i Lprvidores ‘con Linux. No es dificil i {niagihet que més fabricantes de PC se subirén | 1!) al menlen tos'préximos meses. 5 | Potatiles svc Eb aa de los portétiles es un poco complicado, porque los portitiles tienen ciclos de desarrollo cortos, a menudo utilizan semiconductores muy nuevos y los fabricantes | ara yez oftecen la documentacién técnica. A pesar de esto, hay mucha informacién en "Tnternet en lo que concierne a la utlizacion de Linux en cientos de modelos de portitiles. La Pégina de Portétiles Linux (Linux Laptop Home Page) en http:/Avww.cs._ute- 98.2 plusersticharker/inux-laptop/ cs la fuente de informacién més completa sobre “Hr pels Linux.en portétiles, Fl sitio incluye articulos informativos y una lista de | Sera y modelos de portailes que ejecutan Linux, También existe el soporte [Eee far Linux en computadoras palm, como Philips Nino, Apple Newton y PalmPi- jot de eee "VEl-soporte Linux para la Administracién automética de energia (Automatic Power Management, APM) estindar existe, pero es dificil, Problemas conocidos incluyen caracte~ sisticas de suspender-resumir que no fancionan comectamente y dificultades en Ia restaura- cién adecuada de los modos grificos bajo cl sistema X Window. Puede que necesitemos una particién DOS para que funcione la caracteristica suspender a disco (suspend-to-disk). Algunos portitiles no nos permiten tener el disquete y el CD-ROM presentes simulténea- mente, lo que puede hacer que la instalacién sea dificil, aunque la mayorfa de los modelos nuevos soportan el arrangue desde un CD-ROM. Software de desarrollo Hasta did haem ocon aN pros y los contras de seleccionar hardware para un sistema de desarrollo, Esta seccién considera el lado del software de un equipo hack. La mayorfa de las distribuciones Linux ofrecen una opcién de instalacién que instala un entorno de desarrollo completo. Esto incluye bibliotecas de programacién, archivos de encabezamierito, ensambladores, analizadores, compiladores, enlazadores, depuradores, de texto y utilidades de programacién. En general, los distribuidores de Linux hacen iin excelente trabajo cn la construccién de un entomo de desarrollo funcional, siempre y cuando elijamos esa opcién cuando instalemos nuestro sistema Linux. Si no Configuracién de un sistema de desarrollo ~ Capiruto 2 f 5 i } — | hemos, instalndo de manera especifica herrarmientas de desarrollo, esta sec una perspectiva general del software que necesitans instalar, Bibliotecas clave y archivos ( } de encabezamiento ( @De qué tratan las “bibliotecas clave y tos archivos de encabezamiento”? Gran parte del soporte de programacién, especialmente para llamadas de sistema, viene de los archi- Yos fuente del nticleo, asi que querremos tener instalados la fuente del micleo y los archi- vos include. En la mayoria de los sistema Linux, estos archivos estan instalados bajo el ébol de directorio /ust/sre/linux. También necesitaremos las bibliotecas de desarrollo para la biblioteca C, glibc, En los sistemas que utilizan el sistema de administracion de Paquetes RPM, los paquetes de desarrollo C normalmente se Maman glibc-devel- ( something.rpm. Las bibliotecas y archivos de encabezamiento adicionales dependen de lo que estemos programando. Por ejemplo, si prevemos hacer un desarrollo considerable de programas grii- ficos, querremos instalar las bibliotecas de desarrollo X, més las bibliotecas (y archivos de ( encabezamiento) paya el entomo de escritorio que estemos utilizando, GNOME KDE. Las bibliotecas GNOME, si no estin disponibles para la versién Lifiux que estamos utilizando, f pueden descargarse de http:/www.gnome.org/. De manera parecida, los paquetes de desarrollo KDE pueden obtenerse del sitio web KDE, http/nvww.kde.org/. Depuradores | A menos que eseribamos un cédigo perfecto, querremos un depurador de eédigo fuen- } te, Normalmente, esto significa el depurador GNU, gdb, Otras opciones mayormente li | compatibles incluyen la herramicnta de depuracién KDE, kdbg, un frontal gdb para KDE, dda, cl Depurador de Visualizacién de Datos (Data Display Debugger) y xgdb, ua frontal X genérico para gdb. Utilidades de programacion Una amplia variedad de programas caen hajo Ia categoria de utilidades. indent, por ejemplo, puede formatear y sangrar nuestro cddigo para que cuadre con una Cantidad de estindares predefinidos, o podemos personalizario para que encaje con nuestro propio esti- lo de formateo de cédigo. El programa tags (y su contrapartida para emacs, etags) genera archivos que mejoran la habilidad de los editores para navegar y analizar nuestro eédigo. ‘Todos estos programas pueden descargarse del sitio web de GNU, http:/Avww.gnu.org/. Si queremos ¢jecutar una comprobacién de sintaxis répida en nuestro cédigovantes de in- tentar compilarlo o, si preferimos un andlisis de cédigo més completo, el programa Iclint, i disponible en httpd/iclint.cs.virginia.edu/, es la mejor herramienta para este trabajo. Comprueba el cédigo en busca de una gran variedad de problemas incluyendo, sin estar HI ik Junciones y variables no declarddas ¥,posible corrupcién de memoria, Otra di ee busca problemas potencialesién Ja asignacién de memoria; el mejor iS de a Web para estas uilidades es el Almacén de Informacién de AdministraciGn de ‘Memoria yde Asignacién de Almacenamiento Dindmico (Dynamic Storage Allocation and Memory. Management Information Repository), localizado en httpvAwww.cs.colora- ds, ‘Edu/-zorn/DSA.| html en la Web. Nee -Editores de texto i vs Rotates Bs eta i Ek ‘tos editores de programador mAs conocidos'y queridos para Linux (y UNIX) son vi sy émidest Vi est generalinente disponible como Vim (por VI iMproved). Soporta realce de 1% is puede sppuir 63 mensajes de error y depuiacién de 16s compiladores'y depuradores, 1] Sopa Stchivos de identificacién, tiene una rica fuincién de macro y muchas otras caracte- ie ‘ayuda €n el proceso de'escritura’d cédigo. emacs, para Parafraseat a un bro- x bs ‘an gran sistema operativo, pero Linux tiene mas programas, Aliora én setio, emacs a ier Babienitne: €l soporte de programadot més rico, aunque es dificil de aprender. Tie- His ‘caraéter{sticas de vi, y mas: tiene modos que emitlan a varios deptiradores, ‘sopor- jemas de control de cédigo fuente), puede hacer cumplir re ae amplia v de formatos de c6digo fuente ¥ és extremadamente 4 waves ‘de ELISP, Su propia version del lenguaje de programacisn LISP. ia ro son nuestras tnicas opciones, Kdevelop es un entomo de desa- , ‘|/sfollotintegraa§’ (IDE) que rivaliza con Visual Studio de Microsoften su habilidad para i ‘escribir, compilar, depurar y navegar c6digo fuente. Otro IDE popular es Nedit, un IDE bo. |altamente configurable cuya utilizacién es sorprendentemente sencilla, El extremada- ‘mente popular Code Warrior, producido por Metrowerks, también est disponible para la \!plataforma Linux (si no nos importa utilizar o pagar por software comercial). tichos otros editores, menos populares que los ya mencionados pero atin asi con sus Seguidores devotos incluyen, joe, jed, pico y uemacs. HBP Le u En este capitulo, hemos examinado los problemas implicados en la configuraciéni de un «steal de desarroto de software, Hemos revisado ls principales categorfas de hardware, ‘} obgeitvado los componentes que soporta Linux y ofrecido algunas directrices que hay que reserdat cuando se seleccione hardware. El principal punto que hay que aprender de todo | ebt@i28 fue, hasta que Linux sea tan bien soportado por los distribuidores de hardware «conta: Wittdows, sigue siendo una buena préctica confirmar el soporte del hardware que qugrémas Comprobando los abundantes recursos de informacién disponibles en Internet, “hig imbién hems apréndido, en téminos generales, el software que compone un siste- « {ma de desarrollo Linux. Aunque la mayoria de las distribuciones Linux tienen una opcidii i © o/deviisia}acién que instids un rico entorne de desarrollo de software, hemos-aprendido ‘acerca || ponen.un sistenia' dé desatvott, i log coniponerites slave, como los éditores;compiladores y utilidades pes * Como utilizar el grupo de compilador GNU Cardcteristicas de GNU CC Ejémplo tutotial Opciones de linea de comandos comunes Opciones de optimizacién- oF Opciones de depuracién ‘ Opciones especificas de la larquitectura Exitensiones ‘C de GNU : PGCC: El compilador de Pentium Resumen 38 39° 43 50 53 56 61 62 EL Gmpa de herramlentas de progremactén de Lins 38S paiel a GNU CC, més normalmente conocido como GCC, es el grupo de compilador del proyecto GNU. Compila programas exeritos en C fluidez. los distintos dialectos C, como ANSI-C y el C . ‘También compila Fortran (bajo los auspicios de 277). Soluciones para Pascal, Modula~ Ada 9X y otros lenguajes estiin en diferentes fases de desarrollo. Como GCC es la piedra angular de casi todo el desarrollo Linux, lo explicaremos con alguna profundidad, Los ejemplos de este capitulo y los que aparecen a lo largo del libro estén basados, a no ser que digamos lo contrario, en la versién de GCC 2.91.66. ddairiog Suticlehte tiempo en la comunidad de desarrdl psarrollo de ante airemds o leeremos sobre otro compllador; eg¢s, el Jot GNU experimental (o Mejorado) (Experimental na Bf Sulte). Se pretende qué egts sea deserrollado mas actiyamn mipilador més eficiente que GCC, Estaba basado en la base de -y sigue de cerca los lanzamientos de GCC, Para resumir, en. abi cifn de software gratuito (Free Software Foundation), que| hombrd al comité de direccion de egcs como encatgados ofiy itenimiento'de GCC. Al mismo tiempo, GCC cambié de nombre de nde la base de codigo de GCC e incorporande muchios arreglos dee Melorasi As| pues, egcs y GCC son, pera todos los Propésitos, el’ misino} fe ie eter Caracteristicas de GNU CC GCC offece a los programadores control extenso sobre el proceso de compilacién. Este proceso ineluye cuatro clapas: 1. Preprocesianiento 2. tci6n’ propiamente dicha, 3. Knsaniblaye 4, examina 0 utilizar Ta Hntidad 0 el tipo de informacién de depura- erustarli ch el binario resultante y, como la mayorfa de los compi- mbién pucde realizar optimizacién de eédigo. GCC nox permite mezclar fa informacién de depuracisn y 1a optimizacién. Sin embargo, no recomendamos hacerlo, porque el c6digo optimizailo es diffeil de depurar: pueden desaparceer las variables estd- salida del compilator, Podemos controlar fa Cine utitlear ef grupo de eompitadar GNU Cariruto 3 Hicas © romperse los bucles, ya que el programa opti linea con el cédigo fuente original. GCC incluye més de 30 mensajes de aviso individuales y tres niveles de aviso gene- rales. GCC es también un compilador abierto, asf que podemos desarrollar cédigo en una arquitectura de procesador y se ejecutaré en otra. Para terminar, GCC incluye una larga lista de extensiones de C y C++, La mayoria de ellas mejoran el rendimiento, ayu- dan en los esfuerzos del compilador en la optimizaci6n del cédigo y hacen nuestro tra- bajo como programadores mas sencillo. Sin embargo, el precio esté en la portabilidad ‘Veremos algunas de las extensiones mas comunes porque nos las encontraremos en los archivos de encabezamiento de niicleo, pero le sugerimos que las evite en su propio cédigo. izado no se corresponde Linea a ‘Ejemplo tutorial ' Antes de comenzar a ver GCC en profundidad, un pequefio ejemplo nos ayudaré a comenzar a utilizar GCC de forma productiva, Para los propdsitos de esta’ gufa, utilizare- mos ¢l programa del Listado 3.4 USTADO 3.1. PROGRAMA DE DEMOSTRACION DE LA UTILIZACION DE GCC Pp * hello.c - Programa "iHola, mundo! +} #include . void msg( void) . { printt(*Este mensaje se envié desde viipiter.\n"); ty Listapo 3.3, ARCHIVO DE ENCABEZAMIENTO DE HELPER.C rm * helper.h ~ Encabezamiento de helper.c + void msg(void) Ustap0 3.4. EL PROGRAMA HELLO MODIFICADO. i + howdy. ~ Programa *iHola, mundo!* modificado “t include include *helper.h* int main(void) { printf(*IHoLa, mundo de programacién de Linuxt\n"); msg(); > return 0; Pera compilar adecuadamente howdy.c, utilizamos la siguiente linea de comandes: $ fcc howdy.c helper.c -0 howdy GCC pasa por los mismos pasos de preprocesamiento-compilacién-enlazado de antes, Esta vex crea archivos de objeto para cada archivo fuente, howdy.c y helper.c, antes de crear el binario, howdy, en 1a etapa de cxlazado, Introducir largos comandos como éste puede ser tedioso. Bn el Capitulo 4, “Administracién de proyectos utilizando make de _ Como uiilizar el grupo: de vompilador GNU 43 ‘ Carre 31 GNU”, aprenderemos a resolver este problema. La siguiente seccién comenzaré a intro- 1 ducirnos en la multitud de opciones de linea de comandos de GCC. ‘Opciones de linea de comandos comunes ' La lista de opciones de Iinea de comandos que acepta GCC ocupa varias paginas, ast que la Tabla 3.2 s6lo enumera las més comunes, ’ TABLA 3.2, OPCIONES DE LINEA DE COMANDOS DE GCC : Opci6n Descripcién -0 ARCHIVO Especifica el archivo de salida; no es necesario cuando estamos com- pilando a cédigo de objeto. Si no especificamos ARCHIVO, el nom- bre predeterminado es a.out. ( < ‘Compila sin enlazar. -DFOO=BAR Define una macro de preprocesador Iamada FOO con un valor de BAR en a Iinea de comandos. -INOMBREDIRECTORIO —Coloca NOMBREDIRECTORIO en Ia lista de directorios donde se buscan fos archivos include. -LNOMBREDIRECTORIO. Coloca NOMBREDIRECTORIO en Ia lista de directorios donde se buscan los archivos de biblioteca. -static Enluza en bibliotecas extticas, Por omisiGn, GCC enlaza en biblio- ( b tecas compartdas. i «FOO Enlaza en libFOO. | 4 Incluye en el binario informacién estindar de depuracién, | -ggdb Incluye en el binario gran cantidad de informacin de depuracién que | : slo puede entender el depurador GNU, gdb. 0 Optimiza el c6digo compilado. | -on Especifica un nivel de optimizacidn N, O<-Ne=3, Elnivel predeter- + | rinado es I sino especificamos N. que entran en conflicto con él (esta opcién no garantiza un c6digo ! -ansi ‘Soporta el estindar ANSI/SO C, desactivando las extensiones GNU -pedantic Fite todos los avisos necesarios para el estindar ANSI/ISO C. -pedantic-errors Emite todos los errores necesarios para el esténdar ANSI/ISO C. “traditional Soporta la sintaxis del Lenguaje C de Kemighan y Ritchie (como la sintaxis de definicién de funciones de viejo estilo). Sino entiende lo ‘que significa esto, no se preocupe. w Suprime todos los mensajes de aviso, En nuestra opinién, utilizarlo es muy mala idea, Wall mite todos los avisos, generalmente tiles, que puede proporcionar GCC. También se pueden indicar avisos especificos utilizando -Wfaviso}. (continda) Bas [ 44 [El Grupo de herramientas de programacién de Linux Panel TasLA 3.2. OPCIONES DE LINEA DE CoMANDOS DE GCC (ConTINUACION) Opeién Descripcién -werror Convierte todos os avisos en errores, lo que detendré ta eompilacin, “MMe Extrag una lista de dependencias compatible con make. wv Muestra los comandos utilizados en cada paso de la compilacién. Ya hemos visto cémo funciona -c, pero -0 necesita un poco mis de explicacién. -o ARCHIVO Ie dice a GCC ‘que coloque salida en’el archivo ARCHIVO. independiente de la que se esta produciendo. Si no especificamos -0, los valores predeterminados para un archivo de entrada llamado ARCHIVO.SUFUO son colocar un ejecutable en a.out, el e6digo de objeto en ARCHIVO.o y el e6digo de ensamblador en ARCHIVO.s, La sal del preprocesador se dirige a una salida estandar, Cémo trabajar con archivos Include y dé biblioteca Como vimos en la Tabla 3.2, la opcién -I{ NOMBREDIRECTORIO) nos permite aliadir directorios a la ruta de biisqueda de GCC de archivos include. Por ejemplo, si almacena_ mos archivos en encabezamientos personalizados’ en /home/fred/include, entonces, ara que los encuentre GCC, utilizarfamos la opcién -1 como mostramos en el ‘ejemplo siguien e § geo myapp.c -1 /home/fred/include -o myapp La opci6n -L funciona con las bibliotecas igual que la -1 con los archivos de encabe- zamiento. Si utiizamos archivos de bibliotecas que residen en ubicuciones no stand, la opcidn -L{NOMBREDIRECTORIO} le dice a GCC que agregue NOMBREDIRECTO- RIO a la ruta de biisqueda de bibliotecas y se asegura que se busca en NOMBREDIREC-” ‘TORIO antes que en las ubicaciones estindar. Supongamos que estamos comprobando una nueva biblioteca de propramacién, lib- New.so, actualmente almacenada en /homerfred/lib, (.50 es la catunsion normal para bibliotecas compartidas, hablaremos mas sobre el tema en el Capitulo 10, “Cémo utilizar biblioteeas”.) Para enlazar con esta biblioteca, nuestra linea gee de comandos serfa pare~ cida a ésta: Sgee myapp.c -L/hone/fred/1ib -Inew -o myapp La construccién -/home/fredilib hard que GCC busque en /homerfred/lib antes que en su ruta de bisqueda de bibliotecas normal. La opeién -1le dice al enlazador que extrai- 2 c6digo de objeto de la biblioteca especificada. En este ejemplo, queriamos enlazar con libnew.so. Una convencién largamente establecida de UNIX es que las bibliotecas ee ~ Haman lip{algo} y GCC, como la mayorfa de tos compiladores, cumple esta canvencién, Si erramos al utilizar la opcién -1 cuando enlazamos con bibliotecas, el paso de enlazado fallaré y GCC avisaré de referencias no detinidas en function_name, | | | Cémo uilizar el grupo de compitador GNU CapiruLo 3 Naturalmente, podemos utilizar todas a la vez, de hecho, hacerlo es muy normal (y generalmente necesario) para todos los programas que no sean triviales, Bs decir, la linea de comandos: $ gcc myapp.c -L/home/fred/1ib -T/hone/fred/include -Inew -o ayapp le dice a GCC que enlace con libnew.so, que busque libnew.so en /home/fred/lib y que busque en /home/fred/include cualquier archivo de encabezamiento no estindar, Por omisién, GCC enlaza con bibliotecas compartidas, asf que si debemos enlazar con bibliotecas estéticas, tenemos que utilizar la opeidn -static. Esto significa que s6lo se uti- lizarén bibliotecas estéticas durante la etapa de enlazado. El siguiente ejemplo crea un ejecutable enlazado con la ncurses estética (en el Capitulo 23, “Introduccién a ncurses” y enel 24, “Programacién avanzada de ncurses”, explicamos kt programaci6n de interfaz de usuario con neurses): $ gee cursesapp.c -Incurses -static -o cursesapp Cuando enlazamos con bibliotecas estaticas, el binario resultante es mucho més gran- de que el que obtenemos utilizando bibliotecas compartidas, ;Por qué utilizamos entonces bibliotecas estéticas? Una razén comin es garantizar que los usuarios puedan ejecutar su programa; en el caso de las bibliotecas compurtidas, el eédigo que necesita nuestro pro- ‘grama para ejecutarse se enlaza dindmicamente en tiempo de ejecucién, en lugar de esté- ficamente en tiempo de compilacién. Si la biblioteca compartida que necesita nuestro programa no est instalada en el sistema de! usuario, dard errores y no serd posible ejecu- tar el programa. El navegador web de Netscape es un perfecto ejemplo de esto. Netscape confia mucho en Motif, un equipo de programacién de X. Antes del prelanzamiento de Motif como Open Motif (bajo una licencia mas abierta), la mayorfa de los usuarios no podian afrontar Ja instalacién de Motif en sus sistemas. Para cvitar esta dificultad, Netscape instalé dos versiones de su navegador en su sistema; una enlazada con bibliotecas compartidas, Nets- cape-dynMotif, y una que estaba enlazada de forma estética, netscape-statMotif. El “ejecutable” netscape era realmente un guién shell que comprobaba si tenfamés in: da Ja biblioteca compartida Motif y lanzaba alguno de los otros binarios si era necesario, Opciones de mensajes de error y aviso GCC alberga toda una clase de opciones de linea de comandos de comprobacién de errores y generacién de avisos. Incluyen -ansi, -pedantic, -pedantic-errors y -Wall. Por empezar por alguna, -pedantic le’ dice a GCC que gestione todos los avisos que demande estrictamente el estindar ANSI/ISO de C. Cualquier programa que utilice extensiones prohibidas, como aquéllas soportadas por GCC, serd rechazado. -pedantic- errors se comporta de forma similar, excepto en que emite errores en lugar de avisos 'y detiene la compilacién, Para terminar, -ansi desactiva las extensiones GNU que no son compatibles con el estindar. Sin embargo, ninguna de estas opciones garantiza que nues- tro cédigo, cuando se compile sin errores utilizando alguna o todas estas opciones, sea completamente compatible con ANSI/ISO. a. | “46 ( EliGrupo'de herramientas de programacién de Linux Panre ts * 'Consideremos el Listado 3,5, un ejemplo de un formato de programacién muy malo. Declara main con la devolucién de void, cuando, de hecho, main devuelve int, utiliza Ia extensién de GNU long long para declarar un entero de 64 bits y no llama a return antes de terminar. Listapo 3.5. Copco Fuente No ANSI/ISO ity * pedant.c - use -ansi, -pedantic or -pedantic-errors ay #include void main(void) { long long int i = 01; printf(*Este es un programa no contorne con C\n*); Al utilizar gee pedant.c-o pedant, el compilador nios avisa de la devolucién invé- lida de mai © $ gee pedant.c -0 pedant ) Pedent.c: In function *main': pedant.c:7: warning: return type of ‘main’ is not ‘int! Ahora, afiadimos -ansi ¢ la invocacién de GCC: , $ Gee -ansi pedant.c -0 pedant $ gec pedant.c -o podant pedant.c: In function “nain’ pedant.ci7: warning: return type of ‘main’ is not “int? De nuevo, GCC gestiond el mismo aviso e ignoré el tipo de datos invalido. La con- clusign es que -ansi fuerza a GCC a emitir los mensajes de diagndstico necesarios para el estdndar, Esto no asegura que nuestro cédigo sea compatible con ANSI C. El programa se ha cunipilade a pesar de la deckiracién deliberudamente incorrecta de main y del tipo de datos invélido. ‘Ahora, utilizamos -pedantic: , $ gcc -pedantic pedant.c -o pedant pedant.c: In function ‘main’: pedant.c:8: aviso: ANSI C dees not support ‘long long’ pedant.c:7 return type of ‘main’ is not ‘int’ El e6digo todavfa se compila, a pesar del aviso emitido. Sin embargo, esta vez el com- pilador por lo menos se ha dado cuenta del tipo de datos invalido. Pero, con -pedantic- errors, no se compila, GCC se detiene después de emitir el diagndstico de error: $ gce -pedantic-errors pedant.c -o pedant pedant.c: In function “main i Cémo utilizar el grupo de compitador GNU CariruLo 3 pedant.c:8: ANSI G does not support ‘Long long’ pedant.c:7 return type of ‘main’ is not ‘int! Sis hello.c helper.c helper.h howdy.c pedant.c Por reiterar, las opciones de cofpilador -ansi, -pedantic y -pedantic-errors no aseguran un c6digo compatible con ANSI/ISO. Sélo nos ayudan en el camino. Es ins- tructivo sefialar la nota saredstica del archivo info sobre GCC en su utilizacién de ~pedantic: “Esta opcidin no pretende ser existe s6lo para satisfacer a los pedantes que de otra forma clamarfan porque GNU CC falla al soportar el estindar ANSI. Algunos usuarios tratan de utilizar *-pedantic’ para comprobar programas para una compatibilidad estricta con ANSI C. Pronto se darn cuenta de que no hace lo que quieren: encuentra algunas précticas que no son ANSI, pero no todas, sélo aquéllas para las que ANSI C requiere un diagnéstico.” Ademis de las opciones de compilidor -ansi, -pedantic y -pedantic-errors, gcc alberga un cierto ntimero de opciones distintas que gestionan avisos ttiles. La més itil es Ja opcidn -Wall, que hace que GCC gestione un cierto niimero de avisos sobre el codigo que no es de todo erréneo, pero que es potencialmente peligroso o tiene apariencia de poder ser un error. El siguiente ejemplo muestra el comportamiento de -Walll cuando se utiliza en pedant-c: $ gcc -Wall pedant.c -o pedant” pedant.c:7: warning: return type of main’ is not ‘int’ pedant.c: In function ‘main’: pedant.c:8: warning: unused variable Observemos que, esta vez, GCC sefiala la variable i, que no es utilizada, Claramente, esto no es un error, pero demuestra una prictica de programacién pobre. Enel otro extremo del espectro de -Wall esta -w, que desactiva todos los mensajes de aviso. -W{aviso} tiene el efecto de activar un aviso en particular en el que estemos inte- resados, indicado por avis, como de nde funcidn implfcita (-Wimplicit-func- tion-declaration) o funciones que tienen un tipo de retorno declarado ‘implicitamente (Wreturn-type). Lo anterior es stil porque sugiere que hemos definido una funcién sin declararla primero 0 que hemos olvidado incluir el archivo de encabezamiento apropiado. El dltimo indica que es posible que hayamos declarado una funci6n sin especiticar su lipo de retorno, en cuyo caso cl tipo de retomo por omisi6n es int. La Tabla 3.3 enumera un cierto niimero de avisos que proporciona GCC que son titiles para captar errores de pro- gramacién comunes. HA int 1 gt [- aa Eilaripocde harrinileaeas deproannacidn de Lina. . . Pane TaBLA 3.3. Opciones ne Aviso DEGCC Opcion Deseripcion " ; — -Weomment. Avisa si se han utilizado comentarios anidados (aparece un segun- do/* después del primer /*). 2 Lwidrmat Avisa si se han pasado argumentos a printf y funciones relacio- nadas no concuerdan con el tipo especificado por la cadena de formato correspondiente, -Wmain Aviva si el tipo de retorno de main no es into si se Hama a main: con un nimero incorrecto de argumentos, -Wparentheses Ayisa si se han utilizado paréntesis al hacer una asignacién (por ‘ejemplo, (n=10)) en un contexto en el que se esperaba la compa- : racién (por ejemplo, (n==10)), 0 si los paséntesis resuelven un problema precedente de operador. -Wswitch Aviva si una sentencia switch ha olvidado una opci6n para una nos is de sus posibilidades enumeradas (s6lo se aplica siel indice es ae detipo enum), + Avisasi se ha aplicado una variable pero no se ha uiilizado o se ha deglarado una funcién static pero nunca se ha definido. Avisa si sc ha utilizado una variable automética sin iniciarse pre- viamente. ‘Avisa si se evaltia un identificador no definido en una directiva de macro ti -Winline ‘Avisa si no se puedé poner en linea una funcién. Avisa si se define una funcién global pero no se ba declarado en ningdin archive de encabezamiento, ‘visa si se utiliza el tipo long long. Conviette todos los avisos en errores. Como podemos ver, GCC tiene la,capacidad de captar muchos de los errores mas comunes y frustrantes de programaci6n, El Listado 3.6 ilustra un cierto nimero de erro- res tfpicos de cédigo; las lineas de ejemplo del comando gce que siauen al listado mues- tran la opcién -Wfaviso} en accién, Listapo 3.6, _ERRORES DE PROGRAMACION FRECUENTES ies * blunder.c - Errores captados por -Waviso} “ #inelyde Hinelude Elcomienzo de un comentario anidado deberia generar un aviso -Weomment. ‘Veamos primero si gcc captura cl error de tipo de la sentencia printf: $ gee -Wformat blunder.c -o blunder : blurder.c: In function ‘main’: blunder.c:11: warning: int format, pointer arg (arg 2) ‘ blunder.c: At top level: blunder.c:27: warning: type mismatch with previous implicit declaration blunder.c:21: warning: previous implicit declaration of ‘no decl’ " blunder.c:27: warning: ‘no_decl' was previously implicitly declared to wereturn “int: i 4 2 en b SORE) Or ie) | i | EliGripo Ye hetramientas de programacién de Linux | Pare ‘Como podemos ver, las tres ‘primeras lineas del diagnéstico muestran que GCC cap- tifa el fallo dé tipo de la Hamada printf. Después, comprobamos las opciones -Wpa- rentheses y -Wcomment: “$ gcc -Wparentheses -Wcomment blunder.c -o blunder blunder.c:19: warning: */*' within comment ‘blunder.c: In function ‘main’: blunder.c:13: warning: suggest parentheses around assignment used as wtruth value . blunder.c: At top leve blundor.c:27: warning: type mismatch with previous implicit declaration blunder.c:21: warning: previous implicit declaration of “no_decl’ " blunder.c:27: warning: *no_decl' was previously implicitly declared to “ereturn ‘int! Como habiamos anticipado, GCC emite avisos sobre los comentarios aparentemente ‘midados de la linea 19 y sobre la asignacién posiblemente errénea de la linea 13. Para terminar, comprobamos -Wuninitialjzed: 8 geo -0 -Wunitialized blunder.c ~o blunder I).blunder.c: In function “main': yi Dlunder.c:9: warning °j' might be used uninitialized in this function blunder.c: At top level: i ““blunder.¢:27: warning: type mismatch with previous implicit declaration blunder.c:21: warning: previous implicit declaration of ‘no_decl* } Dlunder.c:27: warning: ‘no_decl* was previously implicitly declared to ‘return “int! *” Es interesante que GCC no avisa de que se estd utilizando i sin iniciarse, aunque lo ha hecho con j. Esto se debe a que i se ha indicado primero como wn aviso -Wparentheses (podemos confirmarlo combinando -Wparentheses y -Wuninitialized). Si queremos captar todos estos avisos, y muchos més, utilizamos la opcién -Wall mencionada ante- riormente. Es mucho mis corta. . Esta seccién ha demostrado Ta habilidad de GCC a la hora de capturar errores de pro- gramacién reales y potenciales. La siguiente seceién explora otras capacidades de GCC: Ja optimizacién del eddiyo, Opciones de optimizacién La optimizacién del cédigo es un intento de mejorar el rendimiento. A cambio, se ularzan los tiempos de compilacién, sv incrementa el uso de memoria durante la com Cémo utilizar el grupo de compilador GNU CapinuLo 3 pilacién y, en algunos casos, una huella de disco mayor para el binario resultante. Mien- tras que algunas optimizaciones son generales en su naturaleza y se pueden aplicar en cualquier circunstancia, otras estén disefiadas para explotar caracteristicas de una CPU © familia de CPU dadas. Esta seccién explica ambas clases de opciones de optimi- zacion. La opcién -O en bruto le dice a GCC que reduzca el tamafio del cédigo y el tiempo de cjecuci6n, Es equivalente a -O1. Los tipos de optimizacisn realizados a este nivel dependen del procesador objetivo, pero siempre incluyen al menos saltos de hilo y sal- tos de pila diferidos, Las optimizaciones de salto de hilo intentan seducir el nimero de operaciones de salto; los saltos de pila diferidos tienen lugar cuando el compilador deja que los argumentos se acumulen en Ja pila como retornos de funciones y después los hace saltar simulténeamente, en lugar de dejarlos saltar cuando retomna cada funcién lla- mada \ Las optimizaciones de nivel -O2 incluyen todas Jas optimizaciones de primer nivel mis otras adicionales que implican planificacién de instrucciones del procesador. En este nivel, el compilador se preocupa de que el procesador tiene instrucciones que eje- cutar mientras espera los resultados de otras instrucciones 0 que se recuperen datos de una memoria temporal de segundo nivel o de la principal. Sin embargo, la implementa- cién de estas optimizaciones son especfficas de procesadores altos. La opcién -O3 inclu- ye todas las ‘optimizaciones -O2, desenlace de bucle y otras caracteristicas especificas del procesador. Dependiendo de los conocimientos de bajo nivel que tengamos sobre una familia dada de CPU, podemos utilizar la opeién -f{indicador} para solicitar optimizaciones especifi- cas que queramos realizar. La Tabla 3.4 enumera ocho indicadores de optimizaciones -f que se utilizan frecuentemente. TABLA 3.4. INDICADORES DE OPTIMIZACION DE GCC Indicad Efecto -ffloat-store Suprime el almacenamiento de variables de coma flotante en los registios de CPU, Fsto almacenard los registros de CPU para loltos usos y evitard que se generen niimeros de coma flotante peeing innecesarios, -ftast-math Genera optimizaciones matematicas de coma flotante que s mis répidas pero violan los estindares IEEE y/o ANSY/ISO. ‘nuestro programa no necesita adherencia estricta a IEEE, pode- ‘mos considerar el uso de este indicador cuando compilamos pro- _gramas que son intensivos en coma flotante -finline-funciones Expande todas las funciones simples dentro de quien Jas Hama, Es el compitador quien decide lo que constituye una funcisn sim- ple, La reduccién de la sobrecarga del procesador asociada a las Hamadas de funcién es una técnica de optimizacién bésica. -funroll-loops Desenlaza todos los bucles que tienen un niimero fijado de itera- ciones que se puede determinar en tiempo de compilacién. Esto horra varias instrucciones de CPU por iteraci6n de buele, dismi- nuyendo dramiticamente el tiempo de ejecucién. ° : (continda) er nite : lig) UF EliGripo de herramienias de programacién de Line JPaaTEN) | : ~ INDICADORES DB OPTIMIZACION DB GCC (CoNTINUACION) Efecto -fomit-frame-pointer Desearta un puntero de trama slmacenado en un registro de CPU si la funcién no lo necesita, Bsto acelera el procesamiento porque 1 ont se eliminan las fuiefones necesarias para configurar, almacenar y bh restaurar punteros de trama, -fschedule-insns Reorganiza instrucciones que pueden pararse por estar esperando i: datos que o estén en la CPU. -fschedule-insns2 ‘ Realiza una segunda, vuelta de instrucciodes para reorganizar i i (similar a -fschedule-insns). i : ‘ -fmve-all-movables Mueve todos los cflculos invariantes que tienen lugar dentro dé un bucle fuera del bucle, Esto elimina operaciones innecestrias del bucle, acelerando sus operaciones generates. La puesta en Iinea y el desenlace de un bucle puede mejorar mucho Ia velocidad de sjecucién de un programa porque evita la sobrecarga de lamadas de funciones y biisque- das de variables, pero el coste es normalmente el incremento del tamafio de los archivos objeto o binarios, Necesitaremos experimentar para ver si In aceleracién del tiempo de ejecucién, si existe, merece el incremento del tamatio del archivo. En general, cuando jugamos con las opciones de compilucién del tipo de las enumeradas en la Tabla 3.4, la experimentaci6n y el perfilado del cédigo, o andlisis de rendimiento, son neces confirmar que una optimizacién dada tiene el efecto deseado. Como experimento, el siguiente programa, pisqrt.c (véase el Listado 3.7), calcula ta Yalz cuadrada de pi 10.000.000 veces. La Tabla 3.5 indica la optimizacién 0 indicador de procesador utitizados para compilar cl programa y el tiempo de ejecucién de tres ejecu- clones de pisqrt en una CPU Pentium Il a 260 Mz con 128 MB de RAM. ios para LiSTADO 3.7. CALCULO DE LA RAIZ CUADRADA DET i * pisgrt.c - Calcula 1a raiz cuadrada de PI 1.000.000 + voces *f #include’ #include int main(void) 4 double pi = MPI; /* Definida en */ , double pisqrt; tong i; for(i,= 0; 4 < 10009000; +14) { pisqrt = sqrt (pi); i return 0; Cémo utilizar el grupo de compilador GNU 53 Cariruvo 3L_7" J TABLA 3.5. TIEMPOS DE EJECUCION DE PISQRT indicadorlOptimizacton Mejor tiempo de ejecucién ‘ 5,43 segundos 01 + 2,74 segundos -O2 2,83 segundos ‘ “03 2,76 segundos -ffloat-store 5,41 segundos ffast-math 3.46 segundos funroll-loops ‘5.44 segundos ’ -fschedule-insns 5,45 segundos -fschedule-insns2 5.4 segundos No es un experimento tremendamente riguroso y muestra que, all menos en este pro- grama, dejar que el compilador elija el conjunto correcto de optimizaciones, utilizando -01, -02 y -03, tiene como resultado las mejores ganancias de rendimiento. La leccién que extraemos de esta demostraciGn es quc, a no ser que tengamos muchos conocimien- tos sobre la arquitectura del procesador o que sepamos que una optimizacién en parti lar tiene el efecto especifico que necesita el programa, debemos elegir las opciones de optimizacién O. | CONSEJO — t ha 1 En general, parece que los pidgramadores de Linux utilizan la rrizacion = de este capitulo, veremos pequefias reducciones en el tamatio del codigo y en. ‘el rendimiento en tiempo. Sin embargo, esto se basa mas'en’el habito que en la comprobacion empirica, Como muestra la Tabla 315, la optimization -O1" | tuvo como resultado el mejor incremento de rendimiento para el programa. comprdbado. {la conclusién? intentemos diferentes niveles ‘de optimizacion' para ver void die on_error(void) { J* your cédiga here */ exit (EXIT_FAILURE) ; } * También podemos aplicar atributos a variables. Por ejemplo, el atributo aligned, ordena at compilador que coloque Ia ubicacién de memoria de la variable en un limite de bytes especifico. La sentencia: int int_var __attribute__ ((aligned 16)) = a; hard que GCC coloque int_var en un limite de 16 bytes. El atributo packed li dice a GCC que utilice 1a minima cantidad de espacio necesaria para variables o estructuras. Utilizado con structs, packed hace que GCC elimine cualquier espacio que normal- ‘menté insertaria por razones de alineamiento. Si queremos desactivar los avisos sobre variables no utilizadas, aplicamos el atributo unused a Ia variable, lo que indica al compilador que pretendemos que la variable no sea utilizada, Esto silenciard el aviso que, de otra forma, se generaria: ' float big_salary attribute _ ((unused)); (ae Ee ie Je if rp iL wees ‘ah “peek permite'la utlizaciGn del delimitador de cementarios de C-+4; /, en log progra- mas C a no ser que se utilice tas opciones de'compilador -ansi o -traditional. Muchos ‘otros compiladores lo permiten también y puede llegar a ser parte del nuevo estindar C ue’ 8 esta desarrollando actualmente, Esta caracier‘stica es una ventaja real para una queyd generacién de programadores que emerge de la universidad y que ha wtilizado C++ ef ans que Cy que, por tanto, estin mds acostumbrados a eseribir / en lugar cf 11, Consigeremos esta extensién como vna venta. el iL 6mo utilizar intervalos de tipo de letra Sr muy (itil es la de intervalos de tipo de Jett Tate's a siguiente: era sit Pe : SHE any 2 Lomas. FIV: i Hipeta BAS dai aio wl (0% Jos espacios antes y después de los tres puntos. Usii- | intervalos de tipo de letra en las sentencias switch para especificar los valores entre LOVWAL y HIVAL ambos inclusive. Un ejemplo: ‘ “gyiton(int_var) { 88 Pewee? \ WUT] nuestro cédigo */ oh Dreak; co [iease'a ... 5: el [LIN mas codigo */ | | 1* eédigo predeterminado */ 1 abel] ' : _ Bl fragmento anterior es equivalente a: Lee ' ‘Switch (int:ivar) “{ 1 case yoase igase 2: ‘US J nuestro eédigo */ ‘ | break; ‘dase “nds” odaigo! “4 : * preak;” default: 1 1 fi, Jl, PP e6digo predeterninado */ ct \ ' ‘Los intervalos de tipo de letra son sélo una notacién abreviada y sintécticamente bue- na de In sintaxis tradicional de la sentencia switch. Como podemos ver, hace que el , primér fragmento de cédigo sea menor y mejora ligeramente su Jegibilidad (aunque los cos 4s Cémo utilizar el grupo'de conipilador GNU i oon 3 programadores veteranos de C encuentran més fécil de leer el método idiomético ti do‘en el segundo fragmento). ' Cémo construir nombres de funciones Una extensin GNU que puede simplificar significativamenite la depuracién es la ii: lizacién de nombres de funciones como cadenas. GCC predefine la variable _ FUNC- TION__ para que sea cl nombre de la funcién actual (donde el flujo de control esté actual- mente localizado) como esta escrita.en el cédigo fuente. El Listado 3.8 ilustra cémo funciona esta caracteristica. 5 I i Listapo 3.8. UriLiZACION DE LA VARIABLE _ FUNCTION: f * showit.c - Ilustra la utilizacién de la variable FUNCTION ” i #include aout void foo(void) ; ms Re int main{void) t printf(*La funcién actual es s\n", _ FUNCTION} Likes foo); : return 0; ; a } Hea void foo(void) i : o : | \ 1 printf(*La funcién actual es s\n", _FUNCTION_} | P + wrt 7 Ty El resultado de este programa es: + $ ./showit ' La funcién actual es main La funeién actual es too Como podemos ver, showit informa amablemente del nombre, de Ia funcién qne se estd ejecutando actualmente. Esto puede ser bastante ttil en una sesi6n de depuracion si tenemos dificultades al localizar dénde est4 teniendo problemas un programa. Simple- ‘mente insertamos unas cuantas sentencias printf que utilicen'_FUNCTION__ y répida- mente lo conseguimos. PGCC: El compilador de Pentium Antes de terminar ‘con este capitulo, es bueno mencionar otro compilador menos conocido, pgcc, el GCC de Pentium. Mantenido por ef Grupo del Compilador de Pentium: Ce yee | «eid a aE | ramientas de programacién de Linux ve ‘ (DRE Mow. }QoF.com/pcag), pgcc fue creado'para aftontar las diferentes caracteristi- Jens\de optimizacién de la arquitectura del procesador Pentium en un momento en el que GCG hacia un pobse trabajo con las optimizacignes especificas de estos procesadores. yp esto representa tina bifurcacién del cédigo base de GCC, los que lo mantienen de cerca sus actualizaciones, De hecho, pgce’se distribuye como’ tn'conjunto ‘de “bs iy para €gcs, que es ahora el compilador GNU oficial, iH [Bl benieticio principal de pgcc es una mejor optimizacién para las CPU Pentium. Ori- ain} jente estaba basado en una versién de GCC que creo un equipo de ingenieros de Iptel para Pentium, Mientras el equipo de Intel anunciaba un 30% de mejoras en determi- aplicaciones, el Grupo del Compilador dé Pentium decia con’ precaticién que és | Més|acertada una mejora en rendimiento del 5% en situaciones reales.” 1 | gPor qué moléstarse con pgcc, especialmente ahora que egcs incorpora sofisticadas ‘optimizaciones de Pentium? Bueno, en primer lugar: no necesitamos hacerlo: Después de ‘todo,"esto e5 Linux, y somos libres de hacer lo que queramos. Sin ‘embargo, se utiliza ~ “PYCE como el compilador de las distribuciones Stampede y Enoch Linux, asf que tiene «mds raz6n de ser. También representa una alternativa a GCC. Es més, ver si pgcc puede dye binatios més répidos o pequefios en nuestro sistema puede ser un buen experi- ‘mentg. Para terminar, puede ser sencillamente divertido jugar con otto software. Wl ihag id \ hel Resumen Este, capitulo nos ha introducido en GCC, el grupo de compilador de GNU. Tras una +] guia Tesumido, hemos explicado muchas earacterfsticas de GCC, inclayendo opciones | para ttilizar archivos de bibliotecas y encabezamientos, generacién de avisos temporales “de campilacién, adicién de simbolos de depuragién en nuestros programas y gptimiza- cién, En realidad, s6lo lo hemos estudiado superficialmente; la propia documentaci6n de GCC ocupa varios cientos de paginas. No obstante, sabemos lo suficiente sobre las carac- teristicas y capacidades de GCC como para permitirnos comenzar a utilizarlo en nuestros: propios proyectos de desarrollo. Con este nivel de competencia bésico, estamos prepara- dos para empezar a codificar. No obstante, primero, cl siguiente capitulo, “Administra- ci6n de’ proyectos utilizando make de GNU", agrega otra herramienta clave a nuestra wp 1 ' uy Jy eet ae i Administracion de proyectos © utilizando make de GNU i 2Por qué make? } 1 64 Cémo escribir archivos make | i 64 ' Reglas del archivo make | | | eat ' Opciones y argumentos de la linea" |i de comandos | 7a Depuracién de make ip 2B Mensajes de error comunes de make a * Objetivos utiles del archivo make 74 Resumen 75 il i 64. | Li Guna de herramientas de proyramacién de Linux i i j | Pane i Ep este capitulo, estudiaiemos make, una hetramienta para controlar el proceso de sreaci6n y tecanstruccién de software. make automatize qué software se erea, cémo lo hage y cudndo, dejando libre al programador pera que pueda concentrarse en escribir el 4 ANS hi ae éPor qué make? 1 Para todos los proyectos de software, menos los mds sencillos, make es esencial. En Primer lugar, normalmente, los proyectos compuestos de miiltiples archivos fuente requieren largas y complejus invocaciones de compilador. Ademés, los proyectos de pro- ghumaci6n con frecuencia necesitan opciones de compilador especiales que se utilizan Muy. poco y son dificiles de recordar. make trata ambos problemas almacenando estas {fneas de comandos complejas y dificiles de recordar en el archivo make, que se explica en Ja siguiente seccién, Make también minimiza los tiempos de reconstruccién, porque es lo suficientemente inteligente para determinar qué archivos han cambiado y, de este modo, sélo reconstruye Jos programas cuyos archivos de componentes han cambiado, El archive make constitu ye una base de datos de informacién de dependencia de nuestros proyectos, permitiendo gue make verifique que todos los archivos necesarios para crear un programa estén dis- ponibles cada vez. que comenzamos a trabajar. make también nos permite idear un en- tonto de creacién consistente, Finalmente, make nos permite automatizar el proceso de ereacion, porque se llama faciimente desde un guign de shell 0 se ejecuta desde unas ta~ eas programadas. 4 Como escribir archivos make | Entonces, e6mo consigue make estas mégicas hazafias? Utilizando un archivo make, Un archivo make es una base de datos de archivos de texto que contiene reglas gue le dices 1 make qué crear, cémo crearlo y bajo qué condiciones. Una regla tonsiste de lo siguien iy + Un objetivo, la “cosa” que make intenta crear. © Una lista de una o mas dependencias, normalmente archivos, necesarios para crear 2l objetivo, * Una lista de comandos que ay que ejecutar para crear el objetivo a partir de las dependencias especificadas. Aungue los objetivos son normalmente programas, pueden ser cualquier cosa, como archivos de texto, paginas de manual, etc. Los objetivos pueden incluso probar y estable~ cer variables de entorno. Asi mismo, las dependencias pueden definirse para garantizar ue exista un entomo en particular antes de que comience la compilacién. Por iltimo, los ‘comandos de! archive make pueden ser invacaciones de compilador o comandos shell Administracién de proyectos wilizando make de GNU { Cariruto 4 para establecer variables de entorno, borrar archivos 0 cualquier otra cosa que pueda con- seytirse desde Lr linea de comandes, como descargar un archivo desde un sitio PEP. Cuando se le invoca, GNU make busca un archivo llamado GNUmakefile, makefile o Makefile, cn ese orden. Por alguna, razén, probablemente por habito y convencién cotublevida luce tiempo, la mayoria de los programadores Linux utilizan la altima forme, Makefile. ) Las reglas Makefile tienen Ja forma general: target : dependency {dependency [..-1] ‘command comand ' teed } = er| el cardcteride ‘tabulacion; ochg | 3 i 'espaclos:no bastarans:Este aimenudo cog asia alten y oo ie) 4 de ser un problema slinuestro.editor preferido Waduee. “at _,: tabulagiones a,ochoj espa it tentames ‘Utilizar bic De j os ete make, even aa ‘ie “Falta sepa rador’, fe % sbia Sa ’ target es generalmente el archivo, por ejemplo, un archivo objeto o binario, que que- remos crear. dependency es una lista de uno 0 més archivos necesarios como entrada ) para crear target. Los commands son los pasos, como las invocaciones dé compilador, necesarios para crear target. A-menos que se especifique de otro modo, make lleva a cabo todo su trabajo en el directorio que esté en funcionamiento en ese momento. Regias del archivo make Si la Gltima seccién ha sido demasiado abstracta, sta utiliza el Listado 4.1 para hacer la exphicacion mas conereta. Es el archivo make para crear los programas howdy y hello del Capitulo 3, “Utilizacién de la coleccisn de compiladores GNU”. Lstapo 4.1. ARCHIVO MAKE SENCILLO QUE ILUSTRA OBIETIVOS, DEPENDENCIAS. ) ¥ COMANDOS howdy: howdy.o helper.o helper.h gcc howdy.o helper.o -0 howdy i helper.o: helper.c helper.h goc -¢ helper.c howdy.o: howdy.c gce -¢ howdy.c (continda) 65 ‘amped eigge genes ay a wy ry Na ee i iba deiherramientas de programacion de Linice, ogee r 5 iy HSTARG As Toy ARCHIVO MAikE SENCILLO QUE ILUSTRA OBJETIVOS, DEPENDENCIAS | i fi i: 08, ¥ COMANDOS (CONTINUACION) 2.555 leo: jhetdo.e) |" ? " ‘ Siged helio ie -o'nelio * sees tA PARE DB ctu howdy hello Morgans boyy - : “Pm howdyghello i ‘ || Paraicompilar howdy, sélo hay que escribir make en el directorio donde exista el “archivo make. Bs asi de simple, i Este archivo make tiene seis regias, El primer objetivo, howdy, se Hama objetivo pre- determinado; éste es el archivo que make intenta crear. howdy tiene tres dependencias, 1 howdy.o, helper.o y helper.h; estos tres archivos deben existir para crear howdy, La | segunda nea, la invocacién de compilador, es el comando que ejecutardé make para crear howely: Como recordaremos del Capitulo 3, este comando crea'un ejecutable Hamado howdy de los dos archivos objeto. Bl archivo de encabezamiento, helper.h, se enumera Gomp.una dependencia para evitag mensajes de exror del compilador por llamar a funcio- ines leclaradas, Las dos siguientes reglas le dicen a make cémo crear los archivos jet0 ipdividuales, helper. y howdy.o. Estas reglas utilizan la opeién ~c de gcc, que "crea archivos objeto pero se salta Ia fase de enlace. Si quisiéramos crear los dos archivos objeto sin crear howdy, utilizarfamos las dos lineas de comandos siguientes: PE HMDA bj ss ia x El feinake elper.o.. 1 wi aye fomey-0, ; «Pata ser més concisos, podrfamos utilizar sencillamente: $ make helper.o howdy.o Como podemos ver, make nos permite especificar miltiples objetives como argu- mentos. De cualquier modo, crearfamos los archivos objeto utilizando las reglas corres- pohdientes y sus comandos, La Figura 4. | ilustra el Proceso de manera grafica. « La Figura 4.1 superpone la creacién de howdy al preprocesar-compilé-enlazar génte- ral del que hablamos en el Capitulo 3. Los dos archivos fuente, howdy.c y helper.c, se ejecutan a través del preprocesadot y después se compilan en archivos objeto, Entonces el enlazador enlaza el cédigo objeto de howdy.o, helper.o, la biblioteca estindar y el c6digo de inicio C para generar el binario, hello. i Aqui es donde se hace evidente el valor de make! normalmente, si intentéramos'cre- ar howdy utilizando el comando mostrado, gcc reclamarfa y pararia ceremoniosamente si las dependencias, helper.o y howdy.o, no existieran, Por otra parte, make, después de ver que howdy necesita estos archivos (y helper:h), verifica que existen y, si no es asf, primero ejecuta los comandos para crearlos y después vuelve a la primera regla para Crear ¢] ejecutable howdy, Desde Inego, si helper.h no existe, make también se para- +4, porque carece se una regla para crearlo. jel Administracién de proyectos utilizando make de GNU Capiruto 4 C digo fuente elpene howdy.e ‘Archivos Include reprocesador f<— reper “| betperh ‘Compiiador 1 poe. C aligo objeto helper. ' howdy Cdigo de bbloteca ‘ : Enlazador : [soe init Ejecutable ne eo howdy Figura 4.1, Creacién de howdy desde un archivo make, Probablemente esté pensando “muy bien, pero 2e6mo sabe make cugndo reconstruir un archivo?” La respuesta es asombrosamente sencilla: si no existe un objetivo especifi- cudy en un lugar donde make pueda encontrurlo, make lo (re)construye. Si el objetivo existe, make compara la marca de tiempo del objetivo con la de las dependencias. Si una 0 mds dependencias es més nueva que el abjetivo, make reconstruye éste, asumiendo que esa dependencia mas nueva implica algin cambio de cédigo que debe incorporarse al objetivo. i La carta regia es bastante sencilla. Define como crear el programa dencillo hello que introdujimos en el Capitulo 3. La quinta regla es una regla comodin para crear Hello y howdy y demuestra que incluso los binarios pueden ser dependencias, La siguiente sec- cién explica la sexta regla, que es conocida como objetivo falso, Objetivos falsos I uh i Ademés de los archivos objetivos normales, como howdy y hello, make nos per- mite especificar objetivos falsos. Los objetivos falsos se llaman asf porque no se corres- ponden con archivos reales. El objetivo final del Listado 4.1, clean, es un objetivo falso. Los objetivos falsos existen para especificar comandos que make deberfa ejecutar, Sin, embargo, como clean no tiene dependencias, sus comandos no se ejecutan automética- mente, Esto se deduce de la explicacin de cémo funciona make: después de encontrar rg AB ie i hel objetivo. clean, make ve si las dependencias ex isten y,yeomo clean no tiene depen- i) dencias, make asume que el objetivo esta actualizado, Para crear este objetivo, tenemos } scribir make clean. En este caso, clean elimina los ejecutables hello y howdy y {Archivos objeto constituyentes de howdy. Podriamos creat tal objetivo si quisiéramos, crear y distribuir un archivo de e6digo fuente sea usuarios o empezar una creacién coi un érbol de'creaciéui limpio. |_| Sin embargo, si existiera un archivo — clean, make lo verfa. De nuevo, como | no'tiene dependencias, make asumirfa que estf actualizado y no ejecutarfa sus comandos | .asggiados, Para tratar con esta situacién, utilizatnos el objetivo make especial PHONY. |. Cualquier dependencia del objetivo PHONY seré evaluada como normal, pero make \1 ignoyard la presencia de un archivo cuyo nombre concuerde con una de las depenciencias [des PHONY y ejecutaré los comandos correspondientes “de todos modos. Utilizando ate Me el archivo make serfa como el Listado 4.2," i : HUE Mh spo ft i | |) /4ustApo 4.2, | ARCHIVO MAKE CON UN OBJETIVO'FALSO i } rt | hovidy: howdy.o helper.o helper.h Hqck howdy.o helper.o -0 howdy sneer. 0: helper.e helper. i [Fare -e helper-c i : Lo: howdy.c ec -¢ howdy.c hello: helio.c '<"gco hello.c -o hello Bas 4 ally" howdy hello ‘ -PHONY® : clean i vai clean: Tirm howdy hello *.0 i a4 ‘Variables « .-, i Cited : Has ( : wil ie i Para simplificar la edici6n y mantenimiento de los archivos make, make nos permite crear y utilizar variables, Una variable es, sencillamente, un nombre definido en un archi- Yo make que representa una cadena de texto; este texto se llama valor de la variable. Las variables se definen utilizando la forma general: i ItayARNAME: = some toxt (...1 ‘0 \e'Para oblener el valor de VARNAME, hay que meterlo entre paréntesis y ponerle el \pretio $: "ee SCVARNAME) Administracién de proyectos utilizando make de GNU Cariruo 4 VARNAME se expande al texto del Indo derecho del signo de igual, Las variables nor- malmente se definen al principio de un archivo make, Por convencién, las variables del archivo make van todas en maytisculas, aunque no es necesario. Si el valor ‘cambia, sélo tenemos que hacer un cambio, en vez de muchos, simplificando el mantenimiento del archivo make. Por tanto, después de modificar el Listado 4.1 para utilizar dos variables, se parece al Listado 4.3, EN ARCHIVOS MAKE HDAS = helper.h howdy: $(0BJS) S(HDAS) gcc $(0BS) -o howdy ' helper.o: helper.c $(HDRS) gcc -¢ helper.c \ 1 howdy.o: howdy.c gee -¢ howdy.c hello: hello. i gcc héllo.c “0 hello ¥ i all: howdy hello clean: rm howdy hello *.0 BJS y HDRS expandirén sud valores cada vez. que se les haga referencia, La compi- lacién sera la misma. make utiliza dos tipos de variables; expandidas recursivamenté y expandidas senci- Hamente. Las variables expandidas recursivamente, se expanden literalmente cuando se les hace referencia; si la cxpansidn contiene la referencia a otra variable, también se expande, La expansién continia repitiéndose hasta que-no existen més variables para expandir, de ahi el nombre “expandidas recursivamente”, Un ejemplo hard que esto que- de mids claro. ‘Tomemos las variables TOPDIR y SRCDIR definidas como sigue: ToPoTR SACOIR, shome/kwall fmyproject S(TOPOIR) /sre De este modo, SRCDIR tendré el valor /home/kwall/myproject/src. Esto funciona como se esperaba y deseaba. Sin embargo, veamos la siguiente definicién de variable: cc = gcc cG = s(cc) -o Claramente, Jo que queremos a la larga es CC = gcc -0. Sin embargo, es0 no es lo que obtendremos. CC se expande recursivamente cuando se le hace referencia, asf que termina- remibs Con in bulle infinito: CC sepuiré expandiéndose al valor de'$(CQ) y tuned aleanza- 44'lalopcién -0.'Por suerte, make detectard esta'situaci6n, pararé ¢ informaré de un error: LMT kalvargable “CG' recursiva se hace referencia a si misma (al final). sparen \ Para evitar esta dificultad, make utiliza variables expandidas senecillamente, En lugar de expandirse cuando se lus hace referencia, estas variables se exploran de una vea por todas cuando son definidas; se resuelven todas las referencias a variable incrustadas. La sintaxjs de la definicién es ligeramente diferente: La primera definicién utiliza := para establecer CC igual a gcc -0 y Ja segunda utiliza +5 para agregar -O2 a la primera definicién, de modo que el valor final de CC es gcc -0 -O2, ‘Si nos encontramos con problemas cuando utilicemos variables make u obtenemos el men- ‘saje de error “VARNAME se referencia a { misma”, es hora de utilizar las variables expan- dides’sencillamente. Algunos programadores utilizan slo este tipo de variables para evitar problemas no previstos. \Como esto es Linux, somos libres de elegir! ‘Ademés de las variables definidas por cl usuario, make permite la utilizacién de variables de entorno y también ofrece variables “automdticas” y variables predefinidas. La utilizacion de las variables de entorno es ridfculamente sencilla. Cuando se inicia, male lee cada variable definida en su entomo y crea variables con el mismo nombre y ‘valor, Sin embargo, las variables de nombre parecido en el archivo make cancelan las Yariables de entoro, por lo que hay que tener cuidado. \ aimake ofrece también una larga lista de variables antomiéticas y predefinidas. Aunque tienen un aspecto bastante eriptico. Las variables autométieas se llaman ast porque make Iss reemplaza autométicamente por un valor espectfico conocido, Consulte la ‘Tabla 4.1 para ver una lista parcial de variables autométicas. ' Taos 4.1.7 Variances auromanicas Variable Deserivpcidn $e Blnombre de archivo del objetivo de una regla. " S| Elnombre de la primera dependencia de wna regla. ” Lista de espacio delimitado de todas las dependencias de una reg]. 3 a Lista de espacio delimitado de todas las dependencias de una regla que son mis nuevas que elobjetive. i step) ‘La parte del directorio del nombre de archivo de ln objetivo, si el objetivo esté i ‘en un subdirectorio. ; mgs $(@F) La parte del nombre de archivo del nombre de archivo de un objetivo, si el obje- tivo esté en un subdirectorio. i ‘i Ademés de las variables autométicas que aparecen en la Tabla 4.1, make predefine un cierto niimero de otras variables que se utilizan como nombres de programas 0 para pasar Administraci6n de proyectos utilizando make de GNU CariruLo 4 indicadores y argumentos a estos programas, Estas variables predefinidas parecen més variables make normales que las variables autométicas de aspecto simbélico. La Ta- bla 4.2 enumera una cantidad de variables predefinidas de utilidad i TaBta 4.2. VARIABLES PREDEFINIDAS PARA INDICADORES Y NOMBRES DE PROGRAMA Variable Des ipetin AR Programas de mantenimiento de archivos; valor predeterminado = ar as! Programa para ensamblaje; valor predeterminado = as ce: Programa para compilar programas C; valor predeterminado = ¢¢ cpp Programa preprocesador de C; valor predeterminado = cpp RM ‘Programa para eliminar archivos; valér predeterminado = rm -f ARFLAGS Indivudores para el programa de mantenimiento de archivos; predeterminado = rv ASFLAGS Indicadores para el programa ensamblador; sin predeterminado. CFLAGS Indicadores para el compilador de C; sin predeterminado, CPPFLAGS —__Indicadores para el preprocesador de C; sin predeterminado. LDFLAGS + _Indicadores para el enlazador (Id); sin predeterminado i Si queremos, podemos redefinir estas variables en el makefile. En la mayoria de los casos, sus valores predeterminados son razonables, Reglas mplicitas Ademés de las reglas que especificamos explicitamente en un archivo make, que se Haman reglas explicitas , make viene con un conjunto completo de reglas implicitas + © predefinidas, Muchas de éstas tienen un propésito especial y son de uso limitado, asi ‘que s6lo veremos unas pocas de las reglas implicitas més utilizadas. Las teglas implicitas simplifican la escritura y el mantenimiento de los archivos make, ‘Supongamos que tenemos un makefile parecido a lo siguiente: BJS = editor.o screen.o keyboard.o editor : $(0BJS) cc -0 editor $(0BJS) -PHONY : clean ft clean : i : rm editor $(0BJS) El comando para el objetivo predeterminado, editor, menciona editor.o, screen.o y keyboard.o, pero makefile carece de reglas para crear esos objetivos. Como conse- cuencia, make utilizaré una regla implicita que dice, esencialmente, que por cada archi- ‘Yo objeto somefile.o, se busque un archivo fuente correspondiente somefile.c y se creg el archivé objeto con el comando gcc -¢ somefile.c -o somefile.o. Por tanto, en este wep ae ey ' h Rp aap ae Eibribe te hecraniieiegs de programacién de Linux Pagine tied) my ejemplo, make’ busca los archivos fuente de € Mamados editor.c, screen.c y keybo- ard.c, Jos compila en urchivos objeto (editor.6, screen.o y keyboard,o) y, ‘por iltimo, crea el objetivo editor predeterminado. i En realidad, el mecanismo es més general que lo que hemos descrito. Los archivos objeto (.0) pueden crearse de fuente C, fuente Pascal, fuente Fortran, etc. make busca Ja | dependencia que pucde’satisfacerse. Por tanto, si tenemos archivos editor.p, screen.p y keyboard.p, se invocaré al compiludor Pascal en lugar del compilador C (.p es la supuesta extensién de los archivos fuente de Pascal), La leccién aqui es que si, por algu= na razén perversa, nuestro proyecto utiliza multiples lenguajes, no hay que confiar en las reglas implicitas, porque puede que los resultados no sean los que esperamos, Reglas de patrén : Las reglas de patron ofvecen un modo de resolver las limtitaciones de las reglas impli- | ells de make permitiéndonos definir nuesttas propias reglas implivitas. Las reglas de |, pilrén parecen reglas normales, excepto en que el objetivo contiene exactamente tin carfc= ter (%) que concuerda con cualquier cadena que no esté vacfa, Las dependencias de tal regia también utilizan % para epincidir con el objetivo. Ast que, por ejemplo, la regla Oo ae i eo Ie dice a make que cree cualquier archivo objeto somename.o de un archivo fuente somename.c. “Como Jas reglas implicitas, make utiliza varias reglas dé patrén predefinidas: ” phen | : $(0C); -© S(CFLAGS) S(CPPFLAGS) $< -0 Se » Esta regla es igual que la del ejemplo anterior. Define una regia que hace cualquier archivo X.0 de X.C. Utiliza las variables autométicas $< y $@ para sustituir los nombres de Ia primera dependencia y del objetivo, respectivamente, cada vez que se aplica, Las variables $(CC), $(CFLAGS) y $(CPPFLAGS) tienen los valores predeterminados que aparecen en Ia Tabla 4.2. fe 7 Comentarios Podemos insertar comentarios en un archivo make precediéndolos del signo (#). Cuando make se encuentra con un comentario, ignora el sfmbolo y el resto de la Iinea que lo sigue. Los comentarios pueden colocarse en cualquier sitio dentro de un archivo make. Debs darse una consideracién especial a los comentarios que aparecen en los comandos; porque, la mayorfa de los shells tratan al signo # como un metacarécter (nor malmente, como un delimitador de comentario). En Jo que concierne a make, una linea que contenga S6lo un comentario esté vacia, en'lo que respecta a los propésitos pric- ticos: ! \ 2 nia i ¥ J be a, Adiinistraci6n de proyectos utilizando make de GNU, Capitulo 4 Opciones y argumentos de la linea de comandos Como la mayoria de los programas GNU, make acepia una gran cantidad de opcio- nes de linea de comandos. Las mas comunes aparecen en Ia Tabla 4.3. Tapta 4.3. OPCIONES DE LA LINEA DE COMANDOS MAKE COMUNES Opeién Deseripcién -ffile Especifica un archivo altemativamente llamado archive make. n Tmprime los comandos que se ejecutarfan, pero no los ejecuta en realidad. -Idirname Especifica dirname como un directorio en el que make deberfa buscar archi- vyos make incluidos. 3 No imprime los comandos cuando se ejecutan. w ‘Si make cambia directorios mientras se esté ejecutando, imprime los nombres de directorio actuales. Wile ‘Actiia como si file hubiera sido modificado; se utiliza con -n para ver c6mo se comportarfa make si file se hubiera cambiado.-- + Desactiva todas las reglas incorporadas de make . -d Imprime montones de informacién de depuracién, fi Jgnora los cédigos de error distintos de cero devueltos por los comandos de una rogla del archivo make, rake continuard ¢jecutndose aunque un comando devuelva un estado de salida distinto de cero. -k Si un objetivo no se crea, sigue creando otros. Normalmente, make termina si un objetivo no xe crew C0 ERI. vs saute ‘ iN Ejecuta comandos N en seguida, donde N es un entero distinto de cero. hot ov sader i Depuracién de make Si tenemos problemas utilizando make, la opcién -d Je dice a make que imprima montones de informacién de depuracién extra ademds de, los comandos que est4 ejecu- tando. Fl resultado puede ser increible, porque el voicado de depuracién mostrar lo que make hace interamente y por qué. Esto incluye lo siguiente; aaah + Qué archivos evalia make para su reconstruccién.. + Qué archivos se estén comparando y cudles son los resultados de la a eeepaeaion + Qué archivos necesitan realmente ser rehechos, + Qué reglas implicitas piensa make que utilizaré. N s ‘ + Qué regias implicitas decide utilizar make y los comandos que ejecuta en.rea- Tidad. capa rT Pe ap BS hihi !de'prostamactin ceti | _ Mensaies de error comunes: i og make - \ J hha y, > iwEsta'seccién:enumera los measajes:de crror ifids comunes que nos encontraremos cuando utilicemos make. Para una documentacién completa, dirijase al manual de make / ols paginas info, ithe Ninguna regia para hacer él objetivo ‘objetivo’. Parar. Fl archivo make no tiene una regla que le diga a make cémo construir el objetivo nombrado y no se aplica ninguna regia predeterminada, * “objetivo' esta actualizado. Las dependencias| ‘del objetivo nombrado no han ‘cambiado.”” ~-£%° El objetivo “objetivo’ no rehecho a causa de los errores. Se ha producido un \ zor mientras s¢ creaba el objetivo nombrado, Este mensaje s6lo aparece cuando se || 4 104 utiliza la opcién -k de make. ‘ comando: comando no encontrado. make no ha podido encontrar coman- ‘do. Esto sucede normalmente porque commando se ha escrito mal o no esté en | BAR SPATH ait cl tea i " '" Opci6n ilegal ~ opcién, La invocacién de make inclufa una opcién que no reco: 1) [a noces: Bek atl ia Np a Vieira ; Objetivos utiles del arch ivo make i widens del objetivo clean mencionado anteriormente; existen otros objetivos que normalmente habitan en los archivos make. Un objetivo llamado install mueve el binario final, cualquier guién de shell o biblioteca de soporte y la documentacién a sus ubicacig- nes'finales en el sistema de archivos y establece la propiedad y los permisos de archivos apropiadamente. Un objetivo install normaimente también compila el programa y puede también ejecutar una prueba sencilla para verificar que el programa se ha compilado correctamente. Un objetivo uninstall eliminarfa los archiyos instalados por un objetivo install y, si es uecesario, resiauraria el sistema al estado en el que se encontraba antes de que se hiciera el objetivo install. Be ‘Va objetivo dist es un modo conveniente de’ preparar un paquete de distribuciéa, Como ‘mfnimo, el objetivo dist eliminaré los ‘antiguos ¢ archivos objeto y binarios'del. ‘ditectorio build y creard un archivo file, por ejemplo, un archivo comprimias con gzip, listo para cargar en paginas World Wide Web y sitios FTP. |! 1 Rorlaconveniencia de otros desarrolladores, podrfamos querer crear un objetivo tags gue crea o actualiza la tabla de etiquetas de un programa, Si el procedimiento de verifica- cidn de un programa es complejo, ‘definitivamente, querremos crear un, objetivo ‘separado, Tamado test o check, que ejecuta este proceditniento y emite los mensajes de diagndsti- co spropiados, Se wtilizarfa un objetivo similar, llamado installtest o installcheck, para validar una instalacién, Desde luego, el objetivo install debe tener primero bien cons- truido e instalado el programa. i Administraci6n de proyectos wtiltzando make de GNU Capiruo 4 i Resumen ' En este capitulo hemos cubierto el comando make; explicando por qué es ati] mos- trando cémo escribir archivos makeencillos pero iitiles. También hemos hablado de algunos de los matices de las reglas de make y enumerado algunas de las pricticas opcio- i nes de la Ifnea de comandos de make. Con esta base, deberfamos saber lo suficiente para - utilizar make en la administracién del proceso de creacién y mantenimiento de nuestros | proyectos de software. ( f “Cémo crear ‘software autoconfigurable y portatil - Consideracién de la portabilidad B Estudio de Autoconf 80 Macros internas ee 85 Macros genéricas i a4 Un guién autoconf comentado 92 Resumen 99 irr renee eer Boas ae re de programacién de Linnex reuiees ‘ ay 2 il ‘1 L0s origenes mintos de Linux y la yariedad de distribuciones disponibles demandan ‘una configuracién adaptable y flexible.y'un'entomo construido. Este capitulo revisa et autoconf de GNU, una herramienta que nos permite configurar el software para adaptar- Jo.a Ia gran colecci6n de configuraciones de sistem ‘en la que se puede construir, inclu Yendo muchos sistemas que no son Linux " sf Fike Bi Consideracién de la portabilidad Antes de dirigimos a aprender autoconf, pueden ser itiles algurios conocimientos sobre lo que motivé su creacién, En el nivel més fundamental, portabilidad se refiere a In escritura de programas de forma que se construya e] mismo eédigo fuente, de forma inylterada, en el mayor nimero pusible de plataformas, Esta seccién pretende refinar esta definicién de portabilidad y explicar algunos de los problemas a considerar cuando escri- bimnds cédigo portatil. oe . mi é:Qué es la portabilidad de un programa? tha desarrollo de software que se ejecute ef wid cicrta variedad de plataformas es una targa. demandada. Sélo la creaci6n de software que se construya y se ejecute en una gran Yariedad de sistemas UNIX y similares ya requiere un esfuerzo considerable, Para empe- Zat, €l mismo c6digo debe ser portatil, Este tipo de cédigo hace algunas suposiciones Sobre el hardware en el que se puede ejecutar o las bibliotecas de software disponibles, Ademés, si es c6digo C, para asegurar la méxima portabilidad, el cédigo debe cumplir estrictamente los estindares ISO/ANSI C, o aislar &l C no estindar en tantos médulog como sea posible. * Segundo, necesitamos saber gran cantidad de cosas sobre los entomos de compilacién y.de tiempo de ejecucién de los muy diferentes sistemas y arquitecturas de hardware disponibles. El software GNU, aunque ubicuo en sistemas Linux y disponible para un Conjunto de sistemas operativos y plataformas de hardware alucinante, puede no estar siempre disponible en dichos sistemas, Ademis, pueden darse las siguientes condiciones: + El compilador C puede ser anterior a ISO, + Las bibiiotecas pueden ser caracteristicas clave perdidas. * Los servicios del sistema pueden funcionar de forma diferente. ! * Las convenciones de sistemas de archivos serén con seguridad diferentes. Por el lado del hardware, puede que tengamos que tratar con mecanismos de repre- sentacisn de datos grandes, pequefios e hfbridos, Cuando nos salimos de los procesadores x86 de Intel, por ejemplo, tenemos que tratar con PA-RISC, variedades de Spates, los chips Motorola (de varias generaciones) que dirigen las computadoras Macintosh y Apple, MIPS, Amiga y, pronto en una computadora cercana, el chip Itanium 0 TA64 de intel, Para terminar, tenemos que escribir un Archivo make genérico y proporcionar ins- trucciones a nuestros usuarios sobre cémo editar el archivo make para que se ajuste a las circunstancias locales,

You might also like