2012-11-13 16 views
7

Posso usare pipe tra due processi senza utilizzare fork e condividere i descrittori di file con socket ad esempio? Non ho bisogno di un'altra soluzione, ho bisogno di tubi tra due processi che non sono biforcati.Può usare il tubo senza forcella?

+1

@pst Un socket unix è accessibile in modo completamente diverso: 'connect()', 'accept()' ecc. – glglgl

risposta

9

Si potrebbe utilizzare una named pipe (FIFO):

se lo fai mkfifo <common path>, è un uso questo percorso in entrambi i processi, uno per la lettura e uno per la scrittura. Quindi hai lo stesso comportamento di un tubo normale.

4

La soluzione più semplice è utilizzare una named pipe, che è una pipe con un nome nel filesystem in modo che entrambi i processi possano farvi riferimento. Una pipe denominata viene creata con la chiamata mkfifo() e aperta con open() (un processo dovrebbe aprirlo per la lettura e l'altro per la scrittura).

È possibile utilizzare un tubo di anonimo con due processi indipendenti troppo, ma per farlo è necessario passare in qualche modo una descrizione file è aperto il processo che ha creato il tubo per l'altro processo. È possibile farlo utilizzando un messaggio SCM_RIGHTS su un socket di dominio UNIX, ma se si dispone di un socket di dominio UNIX, è possibile utilizzarlo per comunicare al posto della pipe. Un metodo specifico per Linux prevede che il secondo processo utilizzi open() sul collegamento simbolico /proc/<pid>/fd/<fd> che rappresenta la fine della pipe nel primo processo, ma è piuttosto barocco.