Svuotare buffer in C.

di il
6 risposte

Svuotare buffer in C.

Ho fatto un programma con una sprintf metto tutti i dati di un struct in buffer e poi lo invio dal server al client e tutto va bene.
Il tutto termina con la richiesta se chiudere o meno l'applicazione. Il problema c'è se decido di eseguire nuovamente l'operazione, con il buffer che sembra vuoto e non stampa nulla.
Credo quindi che serva qualcosa per svuotarlo, ma cosa?
Ho letto del comando fflush(), ma dove va messo precisamente? Con java usavo ad esempio "outServer.flush();" dopo che avevo inviato la stringa al client.

6 Risposte

  • Re: Svuotare buffer in C.

    Pubblica il codice che hai scritto altrimenti così dubito che qualcuno possa aiutarti.
  • Re: Svuotare buffer in C.

    Risolto con memset(buffer, 0, sizeof(buffer));
  • Re: Svuotare buffer in C.

    movida ha scritto:


    Risolto con memset(buffer, 0, sizeof(buffer));
    In questo modo tu riempi semplicemente di valori 0 (zero) il blocco di memoria precedentemente allocato. Quall'area di memoria - credo - resti comunque allocata, indisponibile ad essere sovrascritta da altri programmi.
    Lo zero però non può essere inteso, suppongo, come nulla-assoluto, bensì come mero contrario dell'unità: un non-unità.

    Da ciò io mi domando semplicemente:
    1) per "svuotare il buffer" non dovrebbe, invece, intendersi "rilasciare, deallocare il blocco di memoria" puntato dalla variabile buffer ?
    2) ed in tal caso, non avresti dovuto, forse, utilizzare la funzione free( ) ?
  • Re: Svuotare buffer in C.

    vuott ha scritto:


    movida ha scritto:


    Risolto con memset(buffer, 0, sizeof(buffer));
    In questo modo tu riempi semplicemente di valori 0 (zero) il blocco di memoria precedentemente allocato. Quall'area di memoria - credo - resti comunque allocata, indisponibile ad essere sovrascritta da altri programmi.
    Lo zero però non può essere inteso, suppongo, come nulla-assoluto, bensì come mero contrario dell'unità: un non-unità.

    Da ciò io mi domando semplicemente:
    1) per "svuotare il buffer" non dovrebbe, invece, intendersi "rilasciare, deallocare il blocco di memoria" puntato dalla variabile buffer ?
    2) ed in tal caso, non avresti dovuto, forse, utilizzare la funzione free( ) ?
    @vuott se deve svuotare il buffer per poi riusarlo va bene anche così, non occorre deallocare.
    @movida sappi che sebbene hai trovato da solo la soluzione, prima che qualcuno del forum ti rispondesse, non va bene cancellare il codice che avevi postato in precedenza altrimenti diventa difficile seguire per chi dopo rilegge il post. Inoltre così diventa inutile, soprattutto per chi avrà in futuro un problema simile al tuo e cerca una soluzione. Non si usano così i forum.
  • Re: Svuotare buffer in C.

    CarDeFusco ha scritto:


    @vuott se deve svuotare il buffer per poi riusarlo va bene anche così, non occorre deallocare.
    Mi pare di capire, dunque, che l'opportunità, l'utilità e ciò che rende bastevole riempire l'intera area di memoria con il valore zero si rileva in modo particolare, qualora si volesse riutilizzare parzialmente detta area di memoria, sovrascrivendola con nuovi valori. In caso contrario, suppongo possa sorgere il rischio in lettura, non essendovi neppure un valore 0x00, di leggere oltre i nuovi dati anche i vecchi.
  • Re: Svuotare buffer in C.

    vuott ha scritto:


    CarDeFusco ha scritto:


    @vuott se deve svuotare il buffer per poi riusarlo va bene anche così, non occorre deallocare.
    Mi pare di capire, dunque, che l'opportunità, l'utilità e ciò che rende bastevole riempire l'intera area di memoria con il valore zero si rileva in modo particolare, qualora si volesse riutilizzare parzialmente detta area di memoria, sovrascrivendola con nuovi valori. In caso contrario, suppongo possa sorgere il rischio in lettura, non essendovi neppure un valore 0x00, di leggere oltre i nuovi dati anche i vecchi.
    In linea generale se un buffer deve essere riutilizzato conviene sempre svuotarlo anziché deallocare e allocare di nuovo, queste operazioni costano molto di più che svuotare il semplice buffer. Poi se il buffer è allocato sullo stack e non sull'heap ancora meglio, dato che viene deallocato automaticamente quando viene fatto il pop sullo stack e si ritorna nel blocco associato al chiamante.
Devi accedere o registrarti per scrivere nel forum
6 risposte