Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [C] System Call UNIX (da guru)

    E' una cosa un po' specifica, come direbbe il mio prof di S.O. una cosa da Guru...

    Io ho implementato un programma che fa uso delle risorsi IPCS uso una coda di messaggi che salava i dati su una memoria condivisa.
    in particolare uso il metodo rcvbuf(...) che manda in wait il sistema fino a che non viene ricevuto un messaggio di un determinato tipo.


    Come mai rcvbuf si sblocca se mando una signal SIGUSR1???????????
    Come posso evitare che questo succeda... voi avete delle idee... io no...!? Ho esaurito ogni risorsa...!

    Ciao a tutti...
    Grazie in anticipo se rispondete..!
    ---smile is your life---:-)---

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Spiegati un attimino meglio.
    Cos'e' questo ?!?
    "...un programma che fa uso delle risorsi IPCS uso una coda di messaggi che salava i dati su una memoria condivisa..."
    Talebano ?!?


  3. #3
    Ok...devo creare un programma che gestista dei messaggi scritti dagli utenti... una cosa molto rudimentale. C'è un programma demone che ascolta delle richieste da parte di due programmi invia e ricevi.

    Il demone è implementato con:
    - coda di messaggi che permette di gestire tramite le funzioni msgrcv e msgsnd l'invio e la ricezione dei messaggi

    - Memoria condivisa - un array dove ogni indice contiene un messaggio

    - Semafori per la sincronizzazione.

    il metodo msgrcv entra in loop e aspetta fino a quando non riceve un messaggio di una certa tipologia da msgsnd...

    Per questa parte sono a posto... il problema è che implemento anche altri metodi per deallocare le risorse... se chiamo una "signal" con il tipo SIGUSR1 la msgrcv esce dal loop e magicamente smette di attendere in ricezione!

    Mi chiedo c'è un metodo per impedire questo?????
    Sul man non lo trovo...

    Non sono convinto ancora di essermi spiegato bene...
    ---smile is your life---:-)---

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da mr.smile
    Ok...devo creare un programma che gestista dei messaggi scritti dagli utenti... una cosa molto rudimentale. C'è un programma demone che ascolta delle richieste da parte di due programmi invia e ricevi.

    Il demone è implementato con:
    - coda di messaggi che permette di gestire tramite le funzioni msgrcv e msgsnd l'invio e la ricezione dei messaggi

    - Memoria condivisa - un array dove ogni indice contiene un messaggio

    - Semafori per la sincronizzazione.

    il metodo msgrcv entra in loop e aspetta fino a quando non riceve un messaggio di una certa tipologia da msgsnd...

    Per questa parte sono a posto... il problema è che implemento anche altri metodi per deallocare le risorse... se chiamo una "signal" con il tipo SIGUSR1 la msgrcv esce dal loop e magicamente smette di attendere in ricezione!

    Mi chiedo c'è un metodo per impedire questo?????
    Sul man non lo trovo...

    Non sono convinto ancora di essermi spiegato bene...
    Cioe' ti servirebbe catturare il segnale SIGUSR1 per gestirlo in maniera "particolare" ? Hai provato ad utilizzare la funzione sigaction(...) anziche' la signal(...) ?

  5. #5

    Re: [C] System Call UNIX (da guru)

    Originariamente inviato da mr.smile

    Come mai rcvbuf si sblocca se mando una signal SIGUSR1???????????
    Si blocca o viene interrotto?
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  6. #6
    Purtroppo io devo usare una signal con SIGUSR1...
    non posso fare altro... è nelle specifiche...

    msgrcv si sblocca... nel senso... smette di aspettare ed è convinta di averer ricevuto un messaggio.
    Inserisce nuovamente in memoria condivista l'ultimo messaggio che era già stato mandato..! e poi torna a ricevere...
    ---smile is your life---:-)---

  7. #7
    Originariamente inviato da mr.smile
    msgrcv si sblocca... nel senso... smette di aspettare ed è convinta di averer ricevuto un messaggio.
    Inserisce nuovamente in memoria condivista l'ultimo messaggio che era già stato mandato..! e poi torna a ricevere...
    Allora potrebbe darsi che sia interrotta dall'arrivo di SIGUSR1. Verifica questa possibilita`, se non l'hai gia` fatto.
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  8. #8
    Certo... è sicuramente interrotta dalla SIGUSR1...
    nel man viene anche accennato...!

    Il punto è proprio questo...! Come far sì che non si intralcino?
    ---smile is your life---:-)---

  9. #9
    Un processo esce dalla msgrcv quando riceve un segnale, guarda
    > man msgrcv

    Noi l'abbiamo risolto mettendo un flag, ma se trovi soluzioni un po' più eleganti dillo!!!
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare. (Igor Sikorsky)

    Chi beve solo acqua ha un segreto da nascondere (Charles Baudelaire)

  10. #10
    Cioè metti un flag... dove e per cosa...?
    Il man lo dice ma non è che ti dice come porre rimedio a questa cosa...!
    ---smile is your life---:-)---

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 © 2024 vBulletin Solutions, Inc. All rights reserved.