Concetti Chiave
- Il codice include librerie essenziali per la gestione di semafori in ambiente Unix, come
sys/ipc.hesys/sem.h. - Un semaforo è creato utilizzando la funzione
semgetcon un identificatore chiave definito da#define SEM_NUMBER 2012. - La funzione
semctlè utilizzata per impostare il valore iniziale del semaforo a 0, con il comandoSETVAL. - In caso di errore durante l'inizializzazione o l'impostazione del semaforo, il programma stampa messaggi di errore dettagliati e termina con un codice di uscita di 1.
- Il codice utilizza una struttura
union semunper passare i parametri necessari alla chiamata della funzionesemctl.
Inizializzazione del semaforo
#include
#include
#include
#include
/* IDENTIFICATORE DEL SEMAFORO */
#define SEM_NUMBER 2012
int main()
{
int id;
union semun {
int val;
struct semid_ds *buf;
ushort * array;
} argument;
argument.val = 0;
/* int semget(SEM_NUMBER_t SEM_NUMBER, int nsems, int semflg); */
/* CREATO 1 SEMAFORO CON CHIAVE SEM_NUMBER */
id = semget(SEM_NUMBER, 1, 0666 | IPC_CREAT);
if(id
{
fprintf(stderr, "Impossibile attivare il semaforo.\n");
return 1;
}
/* int semctl(int semid, int semnum, int cmd, ...); */
if( semctl(id, 0, SETVAL, argument)
{
fprintf( stderr, "Impossibile settare il valore 0 nel semaforo.\n");
}
else
{
fprintf(stderr, "Semaforo %d inizializzato.\n", SEM_NUMBER);
}
return 0;
}
Domande da interrogazione
- Come viene creato un semaforo nel codice fornito?
- Qual è il valore iniziale impostato per il semaforo?
- Cosa succede se la creazione del semaforo fallisce?
Un semaforo viene creato utilizzando la funzione `semget`, che richiede un identificatore di chiave (in questo caso `SEM_NUMBER`), il numero di semafori da creare (1) e i flag di accesso (0666 | IPC_CREAT). Se la creazione fallisce, viene stampato un messaggio di errore.
Il valore iniziale del semaforo è impostato a 0 tramite la funzione `semctl`, utilizzando il comando `SETVAL`. Se l'operazione ha successo, viene confermato che il semaforo è stato inizializzato.
Se la creazione del semaforo fallisce, il programma stampa un messaggio di errore "Impossibile attivare il semaforo." e termina restituendo 1.