Come è una stretta di mano di & # 8220; & # 8221; generalmente implementato per quanto riguarda i Named Pipes

StackOverflow https://stackoverflow.com/questions/1220499

Domanda

Ho bisogno di implementare un protocollo di tipo handshake in un piccolo programma Linux che utilizza named pipe per comunicare con altri processi. Ho cercato un modello di implementazione generale per un protocollo di tipo handshake quando utilizzo le pipe con nome ma non sono stato in grado di alzare nulla ...

Semplicemente non riesco a credere che non ci siano schemi per farlo. Qualcuno può indicarmi una possibile risorsa?

In piena divulgazione questo è per i compiti ma l'implementazione di questo modello non è i compiti. Dobbiamo risolvere un problema nel codice dei compiti e credo che questa sia una possibile soluzione. I compiti sono implementati in C ++, ma le lingue non contano per me. Non voglio reinventare la ruota ....

Aggiorna : ho la sensazione che questo potrebbe essere implementato con segnali .

Quello che intendo con stretta di mano è che un processo figlio riporta al processo principale che è pronto per il lavoro ma non procede (anche se c'è qualcosa nel pipe) fino a quando il genitore non dà il segnale go. Nella mia teoria di lavoro, avrò molti processi secondari che devono segnalare pronto e attendere il segnale di via dal genitore.

È stato utile?

Soluzione

Nell'uso tipico , i processi si basano sul blocco dell'handshake. Il processo di scrittura apre la pipa per la scrittura, il processo di lettura apre la pipa per la lettura e qualunque cosa avvenga i primi blocchi fino a quando l'altro processo non apre il suo lato. Questo può essere esteso per utilizzare IO non bloccanti sul lato lettore.

Le pipe con nome sono molto utili per l'IPC one-to-one. Nella tua situazione uno-a-molti, dovresti probabilmente usare invece un socket di dominio UNIX.

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