PDA

Visualizza la versione completa : [C] Svuotare il buffer di una pipe su Linux (Debian)


thesalien
08-05-2007, 18:27
salve
qualcuno ha idea se sia possibile svuotare il buffer di una pipe?

Ho alcuni processi che inviano dei dati ad un altro processo tramite una pipe. Ad un certo punto quest'ultimo processo si deve bloccare per via di una getchar. Nel mentre questi processi paralleli continuano ad inviare dati. Io vorrei fare in modo che il buffer della pipe si svuoti non appena la getchar riceva l'input. In teoria potrei far in modo che questi processi si blocchino non appena si arrivi alla getchar ma questa via non è praticabile per il semplice fatto che dovrei stravolgere completamente il codice del mio programma. Spero ci sia un'altra soluzione..

MItaly
08-05-2007, 18:44
Su che sistema operativo lavori?

thesalien
08-05-2007, 18:48
non fa neppure con fflush perchè fflush richiede un file mentre la pipe è un int[2]

thesalien
08-05-2007, 19:24
linux (Debian)

thesalien
08-05-2007, 19:24
ora ho provato ad usare:
char g[] = {"w"};
fdopen(nomepipe,g);

ma niente da fare.. non funziona neppure cosi' :[

MItaly
08-05-2007, 19:27
Puoi inviare un segnale all'altro processo in modo da dirgli di smettere di inviare dati.

thesalien
08-05-2007, 19:29
il fatto è che non posso utilizzare semafori, thread e segnali perchè sono vietati dal professore..

penso di aver impostato male dall'inizio.. qualche altro modo?

thesalien
08-05-2007, 20:54
c'era un errore nel codice di prima:

dovrebbe essere cosi:

char g[] = "w";
fdopen(nomepipe,g);

ma non funziona lo stesso. Ho appena letto bene la manpage:

Modes "w" or "w+" do not cause truncation of the file

Non c'è un modo di "troncare" il filedescriptor come una normale open??

Loading