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 argcchar **argv)
{
  
int Semaforii;
  
char Semstring[16];
  
sem_t *semid;
  
Semafori=atoi(argv[2]);
  
printf("\nSemafori = %d\n",Semafori);
  for(
0Semaforii++)
  {
      
sprintf(Semstring,SEMSTRING,i);
      
printf("CREAZIONE DEL SEMAFORO %s ID %d..."Semstringi);
      if(
semid sem_open(SemstringO_CREAT O_EXCL,S_IROTH S_IWOTH1) == 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 argcchar **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(argcargv);

Grazie a tutti....