Visualizzazione dei risultati da 1 a 4 su 4

Discussione: C handling segnali

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    3

    C handling segnali

    Ciao a tutti,
    ho un problema con la gestioni dei segnali. Ovviamente sto parlando di programmazione di sistema su Unix like, nel mio caso Linux.

    Il mio problema è che ho bisogno di passare un parametro alla funzione handler del segnale.
    Ad esempio io ho un handler fatto così: void handler(int valore)

    lo uso per gestire un SIGUSR1: signal(SIGUSR1, handler);

    come faccio a passare il parametro all'handler?

    Cerco di spiegarmi: quando il processo intercetta il segnale fa partire la funzione handler(), ma ovviamente non gli passa alcun parametro. Come faccio per passargli un parametro?

    es:
    ...
    int var=4;
    signal(SIGUSR1, handler);
    ...


    Voglio che gli venga passato var come argomento, senza ricorrere a variabili globali ecc. E' possibile?


    GRAZIE MILLE!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: C handling segnali

    Originariamente inviato da JoPhj
    Voglio che gli venga passato var come argomento, senza ricorrere a variabili globali ecc. E' possibile?
    Praticamente no, tra l'altro l'argomento dell'handler è la costante intera associata al segnale stesso per il quale lo installi, non un valore che puoi scegliere tu. Chiediti piuttosto se hai davvero bisogno di dover passare un parametro al gestore o se ne puoi fare a meno; se proprio devi, ricorri ad una variabile globale utilizzandola con accortezza.
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    3

    Re: Re: C handling segnali

    Originariamente inviato da YuYevon
    Praticamente no, tra l'altro l'argomento dell'handler è la costante intera associata al segnale stesso per il quale lo installi, non un valore che puoi scegliere tu. Chiediti piuttosto se hai davvero bisogno di dover passare un parametro al gestore o se ne puoi fare a meno; se proprio devi, ricorri ad una variabile globale utilizzandola con accortezza.
    Grazie mille per la risposta! Ho seguito il tuo consiglio e ho utilizzato alcune variabili globali.

    Ho un altro problemino, non creo un altro thread per non infestare il forum di mie richieste:
    ho un ciclo con all'interno un input con scanf e vorrei che il ciclo si interrompesse non appena premo CTRL+C. Il problema è che il programma resta comunque in attesa di input dalla scanf e solo successivamente esce:

    signal(SIGINT,handler);
    ...
    while(flag)
    scanf(..); //si blocca qui
    ...
    void handler(){
    flag=0;
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    3
    Ho risolto facendo fare il ciclo di input ad un processo figlio, che viene terminato tramite un segnale inviato dal padre.

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.