View Full Version : Help programmazione UNIX
Fire Fox II
20-09-2004, 11:31
Salve raga :)
mi servirebbe un aiuto: non riesco a capire il funzionamento di una system call che ha il seguente prototitpo...
int semop(int semid, struct sembuf semoparray[], size_t nops);
Un grazie a chi riesce a descrivermene il funzionamento :)
DanieleC88
20-09-2004, 12:56
Purtroppo al momento non ti so dire. Hai provato con man?
ilsensine
20-09-2004, 13:09
Vegeta sta debuggando un suo programmino che fa uso di quelle funzioni, forse ti può servire da esempio pratico:
http://forum.hwupgrade.it/showthread.php?s=&threadid=769051
Fire Fox II
21-09-2004, 01:01
Originariamente inviato da DanieleC88
Purtroppo al momento non ti so dire. Hai provato con man?
Ehm, cioè? :)
DanieleC88
24-09-2004, 20:34
Chiedevo se avevi provato a leggere la pagina di manuale relativa a quella chiamata, ma lascia stare, ho già provato sulla mia Debian e non trova nessuna pagina di manuale corrispondente. Cerca su Google qualcosa come "using semop", forse trovi qualcosa di interessante.
VegetaSSJ5
24-09-2004, 21:03
ti faccio un copia incolla (a mano) di alcune dispense che si trvano online.
la semp permette che un insieme di operaziooni su un semafro ( un set di semafori) venga eseguita in modo atomico.
int semop(int semid, struct sembuf semoparray[], size_t nops);
-semid è l'identificatore del semaforo (per intenderci il valore di ritorno di semget;
-semoparray è un array di strutture sembuf i cui membri sono:
-unsigned short sem_num: numeri di semafori nel'insieme;
-short sem_op: codice dell'operazione da compiere;
-short sem_flg: flag che viene solitamente impostato a SEM_UNDO per ripristinare lo stato iniziale del semaforo al termine del processo corrente
-nops è il numer di strutture sembuf presenti nell'array semoparray.
in pratica la semop ti permette di realizzare le operazioni di wait e signal su un semaforo. ti faccio un esempio di wait:
int p(int semid, int num) {
struct sembuf p_buf;
p_buf.sem_num= num;
p_buf.sem_op= -1;
p_buf.sem_flg= SEM_UNDO;
if (semop(semid, &p_buf, 1) == -1) {
perror("errore semop");
exit(-1);
}
return 0;
}in pratica semid è il valore restituito da semget, num è il numero del semaforo su cui vuoi compiere l'operazione (se il set di semafori è composto da un solo semaforo puoi omettere il parametro num e sostituire num con 0 dove occorre). per implementare wait e signal non occorre dichiarare tante strutture sembuf contenute in un array ma ne occorre una sola (ecco perchè nella semop al terzo parametro c'è il valore 1). p_buf.sem_op non è altro che il valore che andrà aggiunto al valore corrente del semaforo (poichè questa è una wait ho messo -1, se fosse stata la signal bisognava mettere 1). penso che sia tutto qui...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.