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?
risposta
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.
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.
@pst Un socket unix è accessibile in modo completamente diverso: 'connect()', 'accept()' ecc. – glglgl