Implementación de FIFOs

Considere el siguiente código:

escritor.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));

lector.c

int fd = open("/tmp/myfifo", O_RDONLY);

char buf[100];
read(fd, buf, ??);

Mi pregunta es:

Como no se sabe de antemano cuántos bytes tendrán foo y bar, ¿cómo puedo saber cuántos bytes leer de reader.c?
Porque si yo, por ejemplo, leo 10 bytes en el lector y foo y bar están juntos menos de 10 bytes, los tendré a ambos en la misma variable y eso no quiero.
Idealmente, tendría una función de lectura para cada variable, pero de nuevo, no sé de antemano cuántos bytes tendrán los datos.
Pensé en agregar otra instrucción de escritura en writer.c entre write for foo y bar con un separador y luego no tendría problemas para decodificarlo desde reader.c. ¿Es esta la forma de hacerlo?

Gracias.

Respuestas a la pregunta(5)

Su respuesta a la pregunta