|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2001
Messaggi: 1551
|
[C unix] pipe
mi è venuto un dubbio leggendo il funzionamento delle pipe.
In pratica si crea un array di dimensione 2 per la pipe, chiamato x esempio file_pipes[2]. Immaginando un programmino con padre che scrive nella pipe e figlio che legge, vedo che di norma se sono il padre e voglio scrivere devo prima chiudere file_pipes[0], ossia il descrittore della pipe relativo alla lettura, e poi scrivere su file_pipes[1]..viceversa per il figlio.. Il dubbio è, perchè devo chiudere un descrittore (se tanto non lo uso) per usare l'altro? Qualcosa mi dice che è una domanda stupida, ma non ho trovato spiegazioni da nessuna parte a riguardo..
__________________
myFlickr |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Perché ciò che il sistema operativo ti restituisce sono due descrittori collegati in maniera unidirezionale: ciò che copi in scrittura su filedes[1] sarà disponibile su filedes[0] in lettura. Puoi ad esempio fare una fork() e passare i dati dal padre al figlio, ma dentro i singoli pezzi di codice dovrai chiudere i descrittori che non ti servono e che sono inutilizzati.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2001
Messaggi: 1551
|
Continuo a non capire, ok, dentro i singoli pezzi di codice il padre avra' i 2 descrittori aperti della pipe e il figlio pure..ma se nel padre non tocco il descrittore relativo alla lettura e nel figlio non tocco quello relativo alla scrittura, perche' che problema avrei a lasciarli aperti?
__________________
myFlickr |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Perché certe cose potrebbero non funzionare bene, è importante. La risposta è nelle pagine di manuale, come sempre:
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2001
Messaggi: 1551
|
si, ma ammettiamo che un figlio legga da una pipe in cui scrive il padre.
il figlio legge da fd[0] il padre scrive su fd[1] dove dovrebbe trovare l'EOF il figlio? non penso sull'fd[1] che chiude lui stesso, ma sull'fd[0] che sta leggendo immagino, no? oppure forse ci sono..vuoi dire che il figlio, chiudendo fd[1] permette al padre di chiudere effettivamente il suo fd[1] quando finisce? Nel senso che se il figlio non chiudesse fd[1], il padre non potrebbe farlo nemmeno, dunque il figlio non incontrerebbe mai l'eof nell fd[0] che sta leggendo?
__________________
myFlickr |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Diciamo di sì. Tu chiudi nel figlio il descrittore in scrittura, il padre farà altrettanto quando avrà finito di scrivere: quando saranno chiusi i descrittori, il sistema operativo manda l'EOF sull'altra terminazione della pipe (ovvero il descrittore in lettura).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:54.




















