Beruflich Dokumente
Kultur Dokumente
3
Programación de
sistemas LINUX
Guía de autoeducación
4
5
Agradecimientos
6
7
Índice
Prólogo ………………………………………………………………………...9
5 Tuberías ………………………………………………………………………. 23
7 Semáforos …………………………………………………………………..... 30
14 RPC ……………………………………………………………………..……. 65
ANEXO B Soluciones…………………………………………………………….. 81
BIBLIOGRAFÍA…………………………………………………………………….... 88
8
9
Prólogo
El Sistema operativo UNIX® es uno de los más usados en los ámbitos académico y comercial
debido a su fiabilidad, potencia y flexibilidad. En los últimos años su popularidad se ha
extendido debido a las versiones LINUX para computadoras personales. LINUX se dispone
de manera gratuita junto con una gran cantidad de utilidades, herramientas de programación
y de redes, además de un código fuente abierto. Su alta seguridad ante los ataques por red y
virus lo hace un sistema operativo robusto y estable. Una de las razones más importantes
para el éxito de LINUX es su naturaleza de código fuente abierta. Debido a que permite la
constante mejora y eliminación de errores, por parte de programadores en todo el mundo.
Para los desarrolladores, la interfaz de llamadas al sistema que brinda LINUX, provee las
herramientas necesarias para la construcción de aplicaciones a bajo nivel, con excelente
desempeño y uso mínimo de recursos. Metas todas de cualquier ingeniero dedicado a la
programación de sistemas.
El lenguaje de desarrollo utilizado a lo largo del texto es C dada la estrecha relación que
guarda con la interfaz nativa de los sistemas UNIX®. A pesar de existir diversas variantes de
UNIX® se ha optado por trabajar con LINUX, aunque se han tratado de utilizar solo las
llamadas que son parte del estándar POSIX, lo cual garantiza su funcionamiento en
cualquiera de sus clones. Es muy recomendable conocer los comandos básicos de UNIX ®
aunque se pueden ir aprendiendo sobre la marcha.
Este libro se ha estructurado para ser una guía en el proceso de auto enseñanza en la
programación de sistemas UNIX®. El único requisito son conocimientos previos de
programación en lenguaje C y de arquitectura de computadoras.
Se incluyen al inicio de cada capítulo programas en su forma más simple que ilustran el
concepto clave. Dichos programas se pueden ejecutar de inmediato para facilitar la
comprensión del “fenómeno”. Posteriormente se da una explicación sobre las líneas de
código utilizadas, así como una serie de preguntas y actividades de programación que
permiten al lector mejorar el entendimiento del mismo. La intención principal es que el lector
comprenda de manera rápida, a utilizar la interfaz que ofrece UNIX para comunicarse con el
hardware subyacente. De esta manera el programador puede ahorrar tiempo en la elaboración
de proyectos sobre esta plataforma.
1 Introducción a UNIX
El sistema operativo UNIX así como sus clones derivados (LINUX, Mac OS,
MINIX, IRIX, etc.) mantienen ciertas características que lo han hecho exitoso
respecto a otros sistemas operativos, tanto en el campo educativo como en el
comercial. Con el objeto de tener una mejor comprensión de las funciones que
se verán a lo largo del texto daremos una explicación general del modo en que
opera UNIX.
Figura 1-1
Interfaz del SO
para el
programador y
el usuario.
12
Como programador es muy importante que conozca y sepa usar la interfaz de
usuario para UNIX, es decir el conjunto de comandos que acepta el Shell y
permiten el manejo y administración del sistema. Una guía para este
aprendizaje se puede encontrar en el apéndice del texto.
Figura 1-2
Sistema
multiusuario.
Dado que una CPU (Central Processing Unit) solo puede ejecutar una
operación aritmética en un instante dado. Para poder ejecutar dos programas,
es necesario que dichos programas compartan el CPU. De modo que cada
programa utiliza el CPU unos cuantos milisegundos (proceso en ejecución)
mientras el otro programa espera (proceso en estado de listo).
Figura 1-3
Estados de los
procesos y
transiciones
posibles.
En la figura 1-4 podemos observar un gráfico del uso de CPU por parte de
procesos de usuario y del sistema operativo, así como los conceptos
anteriormente explicados.
14
Figura 1-4
Concurrencia de
procesos de
usuario y del
sistema
operativo.
15
1
2 Paso de argumentos
Introducción
Cuando se desarrolla un programa bajo un sistema operativo basado en UNIX ®
como es el caso de LINUX, se debe tener en consideración que se estará en un
ambiente multiproceso. Esto significa que en un momento dado, se estará
ejecutando nuestro programa de manera concurrente (o paralela en el caso de
que el sistema de computo cuente con más de un procesador) con muchos otros
programas. Inclusive podrían estarse ejecutando varias instancias de nuestro
programa.
Ejemplo práctico
Introduzca en un archivo con ayuda de un editor como vi, pico, o alguno otro de
su preferencia, el programa 2-1 y guárdelo como programa2-1.c
16
Posteriormente construya el programa ejecutable con la siguiente instrucción en
la línea de comandos:
Se puede ver el manual del compilador gcc mediante el comando de ayuda man.
Solo debemos teclear en la línea de comandos:
man gcc
Este comando es muy útil para ver el manual de cualquier llamada al sistema,
función o comando.
./programa2-1
Como podrá observar nuestro programa detecta los argumentos y/o opciones
que se le envían en la línea de comandos.
17
Por convención un programa que termina de manera normal debe devolver un
cero, lo cual se logra con la instrucción:
exit(0);
Ejercicio 2-1 Suponga que no se dispone del argumento argc en la función principal, de
modo que no se conoce el numero de argumentos que el usuario introdujo en la
línea de comandos. Modifique el programa 2-1 para que realice el mismo
trabajo sin utilizar argc.
Ejercicio 2-2 Modifique el programa 2-1 para que imprima también, el número de caracteres
que conforma a cada uno de los argumentos.
18