agosteeno
09-09-2011, 18:32
Salve, ho un programma fatto in questo modo:
- un thread main che esegue alcune operazioni di inizializzazione, crea altri 2 thread e poi fa' una join su questi 2
- un thread input che si mette in lettura sullo stdin per ricevere alcuni comandi dall'utente (con una fgets) e se riceve un particolare comando oppure un EOF (ctrl-d) deve terminare.
- un thread output che e' in ascolto su una socket (in attesa su una accept per essere precisi) per ricevere la risposta ai comandi richiesti dall'utente.
Il thread input esegue un ciclo infinito controllato da una variabile globale.
Il thread output esegue un ciclo infinito controllato dal risultato della accept
Quando invio un SIGINT il gestore di questo segnale fa' terminare la accept (e quindi uscire dal ciclo) il thread output, setta al valore opportuno la variabile per il thread input, ma non mi consente di farlo uscire dalla fgets nella quale e' in attesa.
Nel codice del gestore ho provato a mettere una write su stdin che scrive il comando di chiusura, ma in realta' non succede nulla...
Qualcuno ha idea di come possa fare per far leggere a questa fgets una stringa particolare (o anche inviargli un EOF) tenendo in conto che si possono usare solo funzioni signal-safe (si tratta di un gestore di segnale).
- un thread main che esegue alcune operazioni di inizializzazione, crea altri 2 thread e poi fa' una join su questi 2
- un thread input che si mette in lettura sullo stdin per ricevere alcuni comandi dall'utente (con una fgets) e se riceve un particolare comando oppure un EOF (ctrl-d) deve terminare.
- un thread output che e' in ascolto su una socket (in attesa su una accept per essere precisi) per ricevere la risposta ai comandi richiesti dall'utente.
Il thread input esegue un ciclo infinito controllato da una variabile globale.
Il thread output esegue un ciclo infinito controllato dal risultato della accept
Quando invio un SIGINT il gestore di questo segnale fa' terminare la accept (e quindi uscire dal ciclo) il thread output, setta al valore opportuno la variabile per il thread input, ma non mi consente di farlo uscire dalla fgets nella quale e' in attesa.
Nel codice del gestore ho provato a mettere una write su stdin che scrive il comando di chiusura, ma in realta' non succede nulla...
Qualcuno ha idea di come possa fare per far leggere a questa fgets una stringa particolare (o anche inviargli un EOF) tenendo in conto che si possono usare solo funzioni signal-safe (si tratta di un gestore di segnale).