Реализация 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. Это способ пойти по этому поводу?

Благодарю.

Ответы на вопрос(5)

Ваш ответ на вопрос