Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    [C] svuotare il buffer di una pipe

    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..
    the sALIEN

  2. #2
    Su che sistema operativo lavori?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    non fa neppure con fflush perchè fflush richiede un file mentre la pipe è un int[2]
    the sALIEN

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    linux (Debian)
    the sALIEN

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ora ho provato ad usare:
    char g[] = {"w"};
    fdopen(nomepipe,g);

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

  6. #6
    Puoi inviare un segnale all'altro processo in modo da dirgli di smettere di inviare dati.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    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?
    the sALIEN

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    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??
    the sALIEN

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.