Ciao a tutti,
sto scrivendo (da Linux...) un semplice programmino C che, utilizzando le funzioni dello standard Posix, possa creare dei semafori con nome.
Il mio problema è che, una volta creati ed aperti i semafori, non riesco a chiuderli nonostante utilizzi l'apposita funzione sem_close. C'è qualcosa che non va quando mi rifaccio a quella funzione, ma non capisco cosa...
Vi posto il codice sperando che qualcuno possa darmi l'imbeccata giusta... 
Codice PHP:
#include <stdio.h>
#include <sys/fcntl.h>
#include <unistd.h>
#include "/usr/include/semaphore.h"
#include <errno.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#define SEMSTRING "/semaforo_%d"
void creaSemafori(int argc, char **argv)
{
int Semafori, i;
char Semstring[16];
sem_t *semid;
Semafori=atoi(argv[2]);
printf("\nSemafori = %d\n",Semafori);
for(i = 0; i < Semafori; i++)
{
sprintf(Semstring,SEMSTRING,i);
printf("CREAZIONE DEL SEMAFORO %s ID %d...", Semstring, i);
if(semid = sem_open(Semstring, O_CREAT | O_EXCL,S_IROTH | S_IWOTH, 1) == SEM_FAILED)
{
perror("sem_open");
exit(1);
}
else
printf ("done \n");
if(sem_close(semid) == -1) // <----- BLOCCO INCRIMINATO
{
perror("close");
exit(1);
}
}
}
int main (int argc, char **argv)
{
if (argc < 3)
{
printf("\nERRORE: numero di parametri immessi insufficiente.\n\n");
printf("Correct syntax: %s [-c #sem]", argv[0]);
printf("\n\nIl programma verra' terminato.\n\n");
exit(0);
}
if (strcmp(argv[1],"-c") == 0)
creaSemafori(argc, argv);
}
Grazie a tutti....