Come si cancellano i buffer di output quando il programma esegue il fork?
Domanda
Ho un programma che scrive in un FILE * cgiOut e subito dopo averlo scritto nello stream, devo eseguire il fork ed eseguire un processo in background. Il problema è che dopo il fork, il flusso FILE * sembra svuotare a volte e ottengo un output duplicato (dopo il fork, tutti i file aperti vengono chiusi, il che immagino causa lo svuotamento dei buffer). Come posso evitarlo? Non voglio chiudere il file nel processo principale poiché è aperto in una libreria ed è un socket o pipe credo.
Soluzione
Non sono sicuro di aver capito la tua domanda, ma se vuoi assicurarti che i tuoi buffer cgiOut
siano vuoti prima di fork ()
puoi usare fflush ( )
sullo stream appena prima di fork ()
. Ciò dovrebbe forzare lo svuotamento dei buffer.
Potrebbe essere opportuno utilizzare uno stream senza buffer, modificando le impostazioni di buffering tramite setvbuf ()
e amici. In questo modo non avrai (leggi: non dovresti) avere problemi di buffering, ma potrebbe non essere quello che vuoi.
Altri suggerimenti