Реализация FIFO
Рассмотрим следующий код:
writer.c
mkfifo("/tmp/myfifo", 0660);
int fd = open("/tmp/myfifo", O_WRONLY);
char *foo, *bar;
...
write(fd, foo, strlen(foo)*sizeof(char));
write(fd, bar, strlen(bar)*sizeof(char));
reader.c
int fd = open("/tmp/myfifo", O_RDONLY);
char buf[100];
read(fd, buf, ??);
Мой вопрос:
Поскольку заранее неизвестно, сколько байтов будет у foo и bar, как я могу узнать, сколько байтов нужно прочитать из reader.c?
Потому что, если я, например, прочитал 10 байтов в считывателе, а foo и bar вместе меньше 10 байтов, я получу их оба в одной переменной, а это мне не нужно.
В идеале у меня была бы одна функция чтения для каждой переменной, но опять же я не знаю заранее, сколько байтов будет иметь данные.
Я думал о добавлении еще одной инструкции записи в writer.c между записью для foo и bar с разделителем, и тогда у меня не возникло бы проблем с декодированием ее из reader.c. Это способ пойти по этому поводу?
Благодарю.