Problema/ejercicio en C
Publicado por Mari Jose (2 intervenciones) el 27/12/2017 10:05:06
Buenas tardes,
Tengo que realizar un ejercicio en C y la verdad que ando algo perdida ( C no se me da bien). Me piden relizar el siguiente ejercicio; en C, añadir en una cabecera las siguientes funciones:
a_sem(S,tipo,N). Esta función la primera vez que se invoca en el código de un programa
crea un conjunto de semáforos de N elementos y comprueba que se ha creado con éxito. Una
vez creado el conjunto mediante el uso de una estructura de datos global asocia al primer semáforo
del conjunto el nombre especificado en S y el tipo especificado en tipo. Tanto el nombre
como el tipo son cadenas de caracteres. El tipo solo puede tomar dos valores: 'B' (binario) o 'G'
(general).
Cuando esta función se vuelve a invocar, puesto que el conjunto de semáforos ya está creado,
lo único que hace es asociar a otro semáforo del conjunto el nombre y el tipo especificados
como argumentos de entrada. Antes de realizar la asignación comprueba que existen semáforos
disponibles que no tienen un nombre asignado y comprueba que el tipo corresponde a uno de
los dos tipos permitidos.
Tanto en la primera como en las restantes invocaciones de esta función si alguna comprobación
no es positiva entonces se muestra en la pantalla un mensaje explicativo y finaliza la ejecución
del programa.
– i_sem(S,x). Esta función inicializa el semáforo de nombre S con el valor x. Antes de realizar
la inicialización comprueba que x cumple con las especificaciones asociadas al tipo de semáforo,
es decir, si es un semáforo binario x debe ser 0 o 1, y si es un semáforo general debe ser un
numero entero positivo mayor o igual a 0. Si la comprobación no es positiva entonces se muestra
en la pantalla un mensaje explicativo y finaliza la ejecución del programa.
Yo tengo hecho algo así de la primera parte:
La verdad que no se muy bien como realizarlo. Alguien que me pueda dar alguna pista, o echar una mano, porfavor,
Mil gracias
Saludos
Tengo que realizar un ejercicio en C y la verdad que ando algo perdida ( C no se me da bien). Me piden relizar el siguiente ejercicio; en C, añadir en una cabecera las siguientes funciones:
a_sem(S,tipo,N). Esta función la primera vez que se invoca en el código de un programa
crea un conjunto de semáforos de N elementos y comprueba que se ha creado con éxito. Una
vez creado el conjunto mediante el uso de una estructura de datos global asocia al primer semáforo
del conjunto el nombre especificado en S y el tipo especificado en tipo. Tanto el nombre
como el tipo son cadenas de caracteres. El tipo solo puede tomar dos valores: 'B' (binario) o 'G'
(general).
Cuando esta función se vuelve a invocar, puesto que el conjunto de semáforos ya está creado,
lo único que hace es asociar a otro semáforo del conjunto el nombre y el tipo especificados
como argumentos de entrada. Antes de realizar la asignación comprueba que existen semáforos
disponibles que no tienen un nombre asignado y comprueba que el tipo corresponde a uno de
los dos tipos permitidos.
Tanto en la primera como en las restantes invocaciones de esta función si alguna comprobación
no es positiva entonces se muestra en la pantalla un mensaje explicativo y finaliza la ejecución
del programa.
– i_sem(S,x). Esta función inicializa el semáforo de nombre S con el valor x. Antes de realizar
la inicialización comprueba que x cumple con las especificaciones asociadas al tipo de semáforo,
es decir, si es un semáforo binario x debe ser 0 o 1, y si es un semáforo general debe ser un
numero entero positivo mayor o igual a 0. Si la comprobación no es positiva entonces se muestra
en la pantalla un mensaje explicativo y finaliza la ejecución del programa.
Yo tengo hecho algo así de la primera parte:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct sembuf decrementar[1]={0,-1,0};
struct sembuf incrementar[1]={0,1,0};
int semid;
int resultado;
void a_sem(int N)
{
/*Crear u obtener un conjunto de semáforos de un semáforo (N=5) */
semid=semget(CLAVE,5,IPC_CREAT|PERMISOS);
if (semid==-1) /*Comprobar se ha habido algún error*/
{
printf("\nError");
exit(-1);
}
/* Inicializar el semáforo a 1*/
resultado= semctl(semid,0,SETVAL,val);
}
La verdad que no se muy bien como realizarlo. Alguien que me pueda dar alguna pista, o echar una mano, porfavor,
Mil gracias
Saludos
Valora esta pregunta
0