2009-09-12 5 views
7

Qual è il diverso tra i socket di dominio IPC e Unix e named pipe?IPC vs dominio pipe vs named pipe

Ho avuto definizioni vaghe da vari libri ma non ho potuto ottenere chiarezza su quale dovrebbe essere usato dove.

+0

Quella discussione sembra ottenere più attenzione: http://stackoverflow.com/questions/9475442/unix-domain-socket-vs-named-pipes – schmijos

risposta

6

Quasi ogni modo in cui due processi comunicano tra loro potrebbe essere considerato una forma di IPC.

Ad esempio:

  1. pipe senza nome (cat file.txt | grep foo) o Named Pipes
  2. Unix Domain Socket
  3. TCP o UDP socket
  4. Netlink Sockets on Linux
  5. vari meccanismi di memoria condivisa come i file di mappatura della memoria
  6. Passaggio di messaggi ad alta velocità come ZeroMQ
4

IPC sta per Comunicazioni tra processi. socket di dominio UNIX e named pipe sono solo due meccanismi IPC, descritto in Wikipedia:

6

Come qrdl dichiarato, socket del dominio UNIX e named pipe sono entrambi meccanismi IPC.

Di queste due pipe denominate sono più semplici da utilizzare, ma molto meno flessibili dei socket di dominio UNIX. Ad esempio, se potenzialmente ci si aspetta più di un processo di lettura per ogni processo di scrittura, allora i socket del dominio UNIX sono un must; se ti aspetti che il processo di lettura si fermi e inizi durante l'esecuzione del processo di scrittura, avrai bisogno dei socket del dominio UNIX.

0

Grazie per messa a fuoco la questione, alcune funzioni aggiornate:

In socket di dominio, la comunicazione attuale (lo scambio di dati) non utilizza il file system, ma i buffer di memoria del kernel. Per impostazione predefinita, è la modalità full-duplex.

I pipe denominati sono identificati dal loro punto di accesso, un file conservato nel file system per la gestione dei dati. Una pipe denominata per impostazione predefinita supporta le operazioni di lettura e scrittura bloccate. Tuttavia, è possibile rendere le pipe denominate supportano operazioni non bloccanti specificando il flag O_NONBLOCK durante l'apertura. Una pipe denominata deve essere aperta in sola lettura o in sola scrittura. Non deve essere aperto per lettura-scrittura perché è half-duplex, un canale a senso unico.

+2

OP ha chiesto informazioni sui socket di dominio. I socket di dominio sono generalmente implementati su pipe, quindi sono veloci quanto i pipe. I socket di dominio sono utili in quanto hanno esattamente la stessa interfaccia dei socket di rete (solo una famiglia di socket diversa) quindi se l'applicazione supporta i socket e hai trovato che entrambe le parti si trovano sullo stesso computer, puoi facilmente passare ai socket di dominio per velocizzare le cose (X Windows lo fa). Quindi la tua risposta è errata. – qrdl

+0

spero che sia aggiornato bene. –