-
Notifications
You must be signed in to change notification settings - Fork 0
/
fcsemaforos.c
executable file
·60 lines (53 loc) · 1.41 KB
/
fcsemaforos.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/********************************************
Funciones de Semaforos de Nk-Tron
*********************************************
Archivo: fcsemaforos.c
Descripcion del archivo:
Ofrece funciones de comunicacion de procesos con semaforos.
Es utilizado por el proceso servidor y el proceso bot.
*/
//Prototipos
//
// semrojo(int id_sem)
// semverde(int id_sem)
// creasem(int numero)
// iniciasem(int sem,int valor)
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <errno.h>
void semrojo(int id_sem)//poner en rojo el semaforo
{
struct sembuf operacion;
operacion.sem_num=0;
operacion.sem_op=-1;
operacion.sem_flg=0;
semop (id_sem, &operacion, 1);
}
void semverde(int id_sem)//poner en verde el semaforo
{
struct sembuf operacion;
operacion.sem_num=0;
operacion.sem_op=1;
operacion.sem_flg=0;
semop (id_sem, &operacion, 1);
}
int obtenersem(key_t llave)
{ int id_sem;
id_sem=semget (llave, 1, 0777 | IPC_CREAT );
if (id_sem==-1)
{printf ("no consegui semaforo:%d\n",errno);exit(1);}
return id_sem;
}
void iniciasem(int sem,int valor)
{
semctl (sem, 0/*numero de sem*/, SETVAL/*inicializar*/, valor);
}
int creasem(int numero)
{ int id_sem;
key_t llave= ftok ("/bin/ls", numero);
if (llave==-1)
{printf ("no consegui llave\n");exit(1);}
id_sem=obtenersem(llave);
return id_sem;
}