Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119

    [C] 'open' e 'read' su pipe con nome...

    Ciao, ho un "astioso" problema che da qualche giorno mi affligge... Un processo server legge richieste da una pipe con nome la quale, prima di iniziare ad effettuare le letture, viene aperta in sola lettura. Siccome la open su una pipe e' bloccante, quando essa ritorna c'e' sicuramente un client che ha aperto la pipe stessa in scrittura e, quindi, quando il server effettuera' la read, essa:
    _ o ritornera' il numero di bytes letti
    _ oppure risultera' a sua volta bloccante fintanto che non c'e' qualche byte da leggere.
    E fin qui e' proprio il comportamento che vorrei fosse tenuto dal server.
    L'inconveniente e':
    se c'e' un solo client con la pipe aperta in scrittura, quando esso, una volta ricevuta la risposta dal server, chiudera' la pipe in scrittura il server rimarra' (Non si sa quanto) con una pipe aperta in lettura senza che nessuno ce l'abbia aperta in scrittura.
    A questo punto ogni read che il server effettuera' ritornera' 0 senza che si abbia lo "sperato" comportamento bloccante. Siccome vorrei evitare, ovviamente, attesa attiva come potrei fare per fare in modo che, anche quando il server rimane con la pipe aperta in sola lettura (Senza che nessuno l'abbia aperta in scrittura), possa effettuare delle read bloccanti evitando attesa attiva ?!? C'e' qualche "scappatoia" o qualche soluzione logica... alla quale la mia mente bacata non ha pensato ?!?

    P.S.: avevo pensato di far aprire al server la pipe in modalita' scrittura/lettura in modo che l'effetto bloccante sia sempre dato dalla read (Mentre la open in scrittura/lettura sara' no bloccante). Ma non so se sia "eticamente" corretto...

    thks

  2. #2
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936

    Re: [C] 'open' e 'read' su pipe con nome...

    Originariamente inviato da Ed_Bunker
    Ciao, ho un "astioso" problema che da qualche giorno mi affligge... Un processo server legge richieste da una pipe con nome la quale, prima di iniziare ad effettuare le letture, viene aperta in sola lettura. Siccome la open su una pipe e' bloccante, quando essa ritorna c'e' sicuramente un client che ha aperto la pipe stessa in scrittura e, quindi, quando il server effettuera' la read, essa:
    _ o ritornera' il numero di bytes letti
    _ oppure risultera' a sua volta bloccante fintanto che non c'e' qualche byte da leggere.
    E fin qui e' proprio il comportamento che vorrei fosse tenuto dal server.
    L'inconveniente e':
    se c'e' un solo client con la pipe aperta in scrittura, quando esso, una volta ricevuta la risposta dal server, chiudera' la pipe in scrittura il server rimarra' (Non si sa quanto) con una pipe aperta in lettura senza che nessuno ce l'abbia aperta in scrittura.
    A questo punto ogni read che il server effettuera' ritornera' 0 senza che si abbia lo "sperato" comportamento bloccante. Siccome vorrei evitare, ovviamente, attesa attiva come potrei fare per fare in modo che, anche quando il server rimane con la pipe aperta in sola lettura (Senza che nessuno l'abbia aperta in scrittura), possa effettuare delle read bloccanti evitando attesa attiva ?!? C'e' qualche "scappatoia" o qualche soluzione logica... alla quale la mia mente bacata non ha pensato ?!?

    P.S.: avevo pensato di far aprire al server la pipe in modalita' scrittura/lettura in modo che l'effetto bloccante sia sempre dato dalla read (Mentre la open in scrittura/lettura sara' no bloccante). Ma non so se sia "eticamente" corretto...
    Anch'io ho avuto il tuo stesso problema e mi sono connesso alla fifo sia in lettura che in scrittura...
    Così ho imparato a fare dalla GaPiL, se poi e' corretto o no non so...

    Credo che altri modi per renderla bloccante non ne hai... Sei se no costretto a fare un ciclo che ripeta ogni volta la connessione... Ma penso che sia molto peggio...



    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  3. #3
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119

    Re: Re: [C] 'open' e 'read' su pipe con nome...

    Originariamente inviato da /dev/null
    Anch'io ho avuto il tuo stesso problema e mi sono connesso alla fifo sia in lettura che in scrittura...
    Così ho imparato a fare dalla GaPiL, se poi e' corretto o no non so...

    Credo che altri modi per renderla bloccante non ne hai... Sei se no costretto a fare un ciclo che ripeta ogni volta la connessione... Ma penso che sia molto peggio...



    Nel ciclo dovresti fare ogni volta una read che rischia di ritornare sempre 0 (Se nessuno ha aperto la pipe in scrittura) cosi' da creare attesa attiva.

  4. #4
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936

    Re: Re: Re: [C] 'open' e 'read' su pipe con nome...

    Originariamente inviato da Ed_Bunker
    Nel ciclo dovresti fare ogni volta una read che rischia di ritornare sempre 0 (Se nessuno ha aperto la pipe in scrittura) cosi' da creare attesa attiva.
    Appunto...
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  5. #5
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    C'e' la possibilita' di utilizzare la select o la poll ma, almeno a me, sembra un po' piu' complicato anche se forse piu' "corretto"...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.