Pipe (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m (perché urlato?)
Riga 18:
}}</ref>
 
In maniera analoga, nei sistemi operativi [[Microsoft Windows]] una ''pipe'' convenzionale è denominata '''anonymous pipe''' ed è usabile tramite una coppia di [[HANDLEhandle]]: il primo per la scrittura dei dati, il secondo per la lettura. Per creare una ''anonymous pipe'' va usata la chiamata di sistema [[CreatePipe]].
 
Il flusso di dati scritto da un processo ('''scrittore''') sul descrittore di file o HANDLEhandle aperto in scrittura viene poi letto (nello stesso ordine) dall'altro processo ('''lettore''') tramite il descrittore di file o HANDLEhandle aperto in lettura. I dati generati dallo scrittore e non ancora letti sono memorizzati dal sistema operativo in un [[buffer]] di dimensioni predeterminate (tipicamente pochi [[KiB]]), dal quale sono automaticamente rimossi dopo essere stati letti.
 
Il buffer viene usato come meccanismo di sincronizzazione tra i due processi: quando si riempie, il processo scrittore viene sospeso nell'operazione di scrittura fino a quando il lettore non ha prelevato una parte dei dati; quando il buffer si svuota il lettore viene sospeso nell'operazione di lettura fino a quando lo scrittore non ha inviato nuovi dati.
 
I due processi che comunicano attraverso una ''pipe'' devono in qualche modo scambiarsi i descrittori di file o HANDLEhandle da usare:
* nei sistemi operativi Unix e Unix-like un processo può creare una ''pipe'' tramite l'apposita chiamata di sistema e poi creare un [[processo figlio]] tramite la chiamata di sistema [[fork (programmazione)|fork]], il quale eredita i descrittori di file del padre: il processo padre può inviare dati al processo figlio scrivendo sul descrittore di file aperto in scrittura, mentre il processo figlio li può ricevere leggendolo dall'altro descrittore di file (aperto in lettura). Questo metodo richiede che tra i due processi esista una relazione di parentela. Altri metodi richiedono lo scambio di descrittori di file mediante un ''[[socket (reti)|socket]]'' in dominio Unix.<ref>{{cita libro
|autore=W. Richard Stevens
Riga 35:
|pagine=306-312
}}</ref>
* nei sistemi operativi [[Microsoft Windows]] un processo può creare una ''anonymous pipe'' tramite l'apposita chiamata di sistema, e poi creare un nuovo processo con cui condividere gli [[HANDLEhandle]] specificando appositi parametri alla chiamata di sistema [[CreateProcess]].
 
===FIFO o named pipe===<!-- referenziato da "Named pipe"-->
Se due processi che devono comunicare tra loro con una ''pipe'' sono del tutto separati (ovvero non hanno modo di scambiarsi tra loro dei descrittori di file o HANDLEhandle), è possibile creare nel ''[[file system]]'' un file speciale detto '''FIFO''' o '''named pipe''', che funge da punto di accesso alla ''pipe'': scrivendo su questo file speciale si inviano dati alla ''pipe'', mentre leggendolo si possono prelevare. È da sottolineare che anche in questo caso i dati scambiati non sono memorizzati temporaneamente nel ''file system'', ma transitano da un processo all'altro tramite un buffer.
 
In questo modo, un processo può offrire un servizio ad altri processi aprendo una ''named pipe'' in una posizione nota del ''file system''.