Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] - semafori e funzione sem_close

    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....

  2. #2
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Ciao!
    La funzione che usi per creare il semaforo inizializza il suo contatore a 0?
    Normalmente le funzioni che chiudono i semafori decrementano il contatore e bloccano la risorsa sol nel momento in cui questo contatore scende sotto 0, permettendo così all'utente di decidere quanti enti possono utilizzare contemporaneamente la risorsa impostando quel parametro.

  3. #3
    Ciao,

    in effetti l'errore era nell' if di creazione del semaforo, un banale errore di parentesi, andava infatti scritto:

    Codice PHP:
    if((semid sem_open(SemstringO_CREAT O_EXCL,S_IROTH S_IWOTH1)) == SEM_FAILED
    ovvero andava inserita una ( ed una ) in più di come non avessi fatto...


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.