LABORATORIO 07
Linux: Programacin de Procesos con Semforos
Objetivos:
-
A. SEMAFOROS
Para utilizar semforos en un programa se debe seguir los siguientes
pasos:
Obtener clave de semforo, esta clave se trata de una clave para un
recurso compartido. Utilizado tambin para compartir memoria y colas
de mensaje.
key_t ftok(char *, int)
Donde el primer argumento es el nombre y la ruta de un archivo
cualquiera. Y el segundo parmetro es un nmero cualquiera. Todos los
procesos que quieran compartir el semforo deben suministrar el mismo
archivo y el mismo nmero.
Obtener un arreglo de semforo, se realiza con la funcin:
int semget(key_t, int, int)
Donde el primer parmetro es la clave obtenida en el paso anterior, el
segundo parmetro es el nmero de semforos que contendr el arreglo
y el tercer parmetro son algunos flags que permiten poner permisos de
acceso al semforo (como en los ficheros) de lectura, escritura para el
usuario, grupo y otros. As mismo lleva unos modificadores para la
obtencin del semforo.
Por ejemplo, se pondr 0600 |IPC_CREAT que indica permiso de lectura
y escritura para el propietario y que los semforos se crearn sino
existen al momento de invocar a segment(). Es importante colocar el 0
delante del 600 para que el compilador del C interprete el nmero en un
formato octal.
La funcin segment() devuelve un identificador al arreglo de semforos.
Inicializacin del semforo. Uno de los procesos que comparten el
semforo debe inicializarlo. Para esto utiliza la funcin:
int semctl(int, int, int, int)
Donde el primer parmetro es el identificador del arreglo de semforos
del paso anterior, el segundo es el ndice del semforo en el arreglo el
cual queremos inicializar (si slo se ha solicitado un semforo, este
parmetro es 0). El tercer parmetro indica lo que se desea hacer con el
semforo. Por ejemplo, si se pone SETVAL significa que queremos
inicializarlo. El cuarto parmetro podra ser un entero, pero en realidad
Ing. Mayenka Fernndez Chambi