Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] Problema semafori

  1. #1

    [C] Problema semafori

    ciao a tutti ho il seguente codice che genera i semafori

    codice:
    //Creo i semafori      
     if((semid = semget(36,nodesNumber,IPC_CREAT|IPC_EXCL|0666))== -1){
           perror("semget");
           exit(1);
        }
    poi dopo una chiamata ad una execl richiamo questo semaforo

    codice:
    //Collegamento ad un semaforo già esistente   
     if((semid = semget(36,nodo,0666)) == -1){
             perror("semget");
             exit(1);
         }
    il problema è che mi da un errore del tipo: semget: No such file or directory


    cosa sbaglio?

  2. #2
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Premetto che di c sono un bel po' arruginito comunque il problema dovrebbe essere l'attach al semaforo:
    quando ti agganci a un semaforo già esitente, il semflag (terzo parametro) deve essere settato a zero.

    Un consiglio: la creazione delle chiavi sarebbe meglio lasciarla al sistema operativo (ftock o IPC_PRIVATE); se invece hai realmente bisogno di usare una chiave decisa da te, sarebbe meglio definirla come costante in un header, il quale sarà incluso in tutti i processi che usano quel semaforo
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  3. #3
    Quote Originariamente inviata da Nikopol Visualizza il messaggio
    Premetto che di c sono un bel po' arruginito comunque il problema dovrebbe essere l'attach al semaforo:
    quando ti agganci a un semaforo già esitente, il semflag (terzo parametro) deve essere settato a zero.

    Un consiglio: la creazione delle chiavi sarebbe meglio lasciarla al sistema operativo (ftock o IPC_PRIVATE); se invece hai realmente bisogno di usare una chiave decisa da te, sarebbe meglio definirla come costante in un header, il quale sarà incluso in tutti i processi che usano quel semaforo
    grazie mille per la risposta..!!

    Purtroppo anche provando a settare a 0 il terzo parametro il risultato è lo stesso.

  4. #4
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Se continua a darti lo stesso errore allora potrebbe darsi che quando esegui l'attach, il semaforo sia già stato distrutto.
    Per verificarlo fai questa prova:
    stampa semid e sospendi il programma prima dell attach. Poi da terminale usa il comando ipcs -s e controlla che ci sia effettivamente un semaforo con quel semid.
    Nel caso il semaforo non ci sia più azzarderei un ipotesi: nel processo padre distruggi il semaforo prima della morte del processo figlio. Assicurati di distruggere il semaforo solo dopo aver eseguito while(wait(NULL) != -1); o un oppurtuna wait equivalete.
    Ultima modifica di Nikopol; 19-06-2015 a 14:49
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

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.