Implementación correcta de una comunicación entre procesos (IPC) - linux, process, ipc, inter-process-communication

¿Es lo siguiente una implementación adecuada de una comunicación entre procesos?

#include <stdio.h>
#include <fcntl.h>
#include <sys/poll.h>

int main(int argc, char** argv) {
if (argc > 1) {
//Sending side
struct stat buffer;
if (stat("/tmp/PROCAtoPROCB", &buffer) != 0)
mkfifo("/tmp/PROCAtoPROCB", (mode_t)0600);

int fdFIFO = open("/tmp/PROCAtoPROCB", O_WRONLY | O_NONBLOCK);
if (fdFIFO > 0) {
write(fdFIFO, (void *)argv[1], sizeof(argv[1]));
close(fdFIFO);
}
} else {
//Receiving side
int fdFIFO = -1;
struct stat buffer;
if (stat("/tmp/PROCAtoPROCB", &buffer) != 0)
mkfifo("/tmp/PROCAtoPROCB", (mode_t)0600);

while (1) {
struct pollfd pollfds[1];
if (fdFIFO == -1)
fdFIFO = open("/tmp/PROCAtoPROCB", O_RDONLY | O_NONBLOCK);
pollfds[0].fd = fdFIFO;
pollfds[0].events = POLLIN;
poll(pollfds, 1, -1);
if (pollfds[0].revents & POLLIN) {
char buf[1024];
read(fdFIFO, &buf, 1024);
close(fdFIFO);
fdFIFO = -1;
printf("Other process says %sn", buf);
}
printf("End of loopn");
}
}
return 0;
}

Parece estar funcionando pero me pregunto si podría haber una condición de carrera que lleve a la suspensión. Una restricción es que ambos procesos deben iniciarse de manera independiente y en cualquier orden.

Respuestas

0 para la respuesta № 1

Algunas pruebas de estrés no mostraron problemas, por lo que la implementación parece correcta si alguien quiere reutilizar el código.


preguntas relacionadas
Menú