Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20

    Uscire dall'attesa della fgets() su stdin

    Salve a tutti,
    sto realizzando un'applicazione multithread client-server in C (con socket AF_UNIX) e nel client ho un thread che è incaricato di leggere da stdin le richieste dell'utente, utilizzando una fgets().
    La gestione dei segnali è stata svolta nel seguente modo: nel caso in cui il processo riceva un segnale di SIGINT o SIGTERM, l'applicazione client deve chiudere "gentilmente", quindi tutti i suoi thread devono terminare.. tutti i thread hanno i segnali mascherati con opzione di SIG_IGN, tranne un thread "handler" che imposta opportune variabili per informare tutti quanti che si deve terminare l'esecuzione.
    Il problema però è il seguente: il thread di cui vi ho parlato prima rimane in attesa sulla fgets() e non ha la possibilità di essere avvertito, proprio per via di questa attesa indefinita su stdin..

    Qualcuno sa come sbloccare l'attesa ed uscire dalla fgets()???

    Grazie in anticipo a tutti coloro che mi risponderanno..
    Gabriele

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Prova a scrivere su stdin un ritorno a capo nel thread che dorvebbe aspettare gli altri.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20
    ciao.. innanzitutto grazie per aver risposto =)

    te intendi una fputc('\n', stdin) ??? Provai già questa soluzione, ma senza esito... forse perchè non è possibile andare a modificare i buffer degli stream di ingresso..??

    Grazie comunque..

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    A me su window funge.

    codice:
    void thread_code(void *threadno)
    {
       char c[100];
    
       fgets(c,100,stdin);
    
        _endthread();
    }
    Termina che una meraviglia, cmq è una risposta d'istinto, senza manco pensarci. Ci saranno soluzioni migliori e funzionanti?
    Per gli Spartani e Sparta usa spartan Il mio github

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.