Domanda

Quali sono le differenze tra le pipe in Windows e Linux?

È stato utile?

Soluzione

Una differenza che conosco è che le pipe denominate sotto Linux sono voci effettive nel filesystem (lo vedrai in un elenco di directory, hanno un tipo speciale), mentre su Windows sono archiviate in un repository magico da qualche parte (sono tutti accessibili tramite il percorso " \\. \ pipe \ " ;.

In secondo luogo, in Linux puoi semplicemente scrivere / leggere dalle pipe come se fossero qualsiasi altro file, usando i metodi standard di IO del file. Considerando che su Windows, devi usare le speciali funzioni 'Pipe' che fanno parte dell'API Win32.

Mi piace meglio il metodo di Linux, perché mi permette di usare le pipe con qualsiasi app che voglio. Ad esempio:

mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi

Questo mi permette di convogliare l'uscita del decodificatore MP3 direttamente nel decodificatore video, invece di dover prima decodificare l'intero MP3 in un file WAV su disco. È utile se si dispone di una CPU dual-core, perché quindi si eseguono entrambe le operazioni contemporaneamente, per una buona velocità.

Altri suggerimenti

Sotto Linux (e * ix in generale), "tutto è un file". Puoi leggere / scrivere / cercare pipe e socket e dispositivi senza restrizioni, nella misura in cui tali operazioni hanno senso.

Considerando che Windows ha un'architettura molto meno unificata per questi diversi tipi di oggetti. Sebbene non potessi dirti i dettagli, so che il buffering delle pipe è notevolmente diverso tra Windows e Linux, quindi potresti incontrare difficoltà lì.

Inoltre, un uso comune di Unix-y di pipe è fork () e quindi comunicare con esso tramite una pipe (il genitore apre un'estremità, il figlio apre l'altra estremità). Sotto Windows, questo genere di cose non è possibile. I meccanismi IPC sono abbastanza diversi.

Vedi anche il thread precedente:

Come si chiamano pipe?

Che contiene la mia opinione e molte altre persone

Un'altra importante differenza

Sotto windows

A | B | C 

Finché A non ha terminato la sua uscita B non inizia la lettura, lo stesso per l'output B viene letto da C

* nix collega input e output in modo che C possa leggere l'output di B e B possa leggere l'output di A mentre A e B sono ancora in esecuzione

Il throughput è più o meno lo stesso ma l'output viene visualizzato più velocemente con * nix.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top