Может ли кто-нибудь дать мне хороший пример совместной очереди с несколькими процессами (FIFO) в C/C++?
Обратите внимание, что я не ищу реализацию на основе потока (pthread). Хотя я приветствую предложения и для многопоточных.
В основном ищет что-то, что может работать с fork и exec, поскольку у меня есть уже написанное приложение, использующее fork/exec.
** IPC-каналы также я не ищу, поскольку они умирают, если любой из процессов отправитель/получатель умирает *** Я бы хотел, чтобы что-то не было временным, то есть очередь могла ждать, пока другой процесс станет активным?
Я нашел решения для потоков в Intel TBB и увеличил библиотеки потоков. Но я ищу что-то еще в области общей памяти.
Для IPC (inter process communication) я использовал каналы в системе Unix, вот пример.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#define BUFF_SIZE 50
#define READ 0
#define WRITE 1
int main() {
char write_msg[BUFF_SIZE] = "Hi, this is child proces!!!";
char read_msg[BUFF_SIZE];
int fd[2];
pid_t pid;
pipe(fd);
pid = fork();
if (pid == 0) {
close(fd[READ]);
write(fd[WRITE], write_msg, strlen(write_msg) + 1);
close(fd[WRITE]);
}
else {
close(fd[WRITE]);
read(fd[READ], read_msg, BUFF_SIZE);
printf("The message is: %s", read_msg);
close(fd[READ]);
}
return 0;
}
Это не будет работать в Windows, но если бы я был на вашем месте, я бы искал способ использовать каналы (или другие механизмы IPC).