Вы не можете использовать трубы таким образом. Прежде всего, информация устареет, как только вы ее получите, так как к тому времени в канал можно будет записать больше данных. Вы должны использовать другую стратегию распределения.
Самая распространенная стратегия - выделить буфер фиксированного размера и просто продолжать чтение, пока не дойдете до конца файла. Вы можете обрабатывать данные так, как вы их читаете, если хотите.
Если вам нужно обработать все данные в одном блоке, вы можете выделить большой буфер и начать чтение в него. Если он заполнится, используйте realloc
для увеличения буфера и продолжайте, пока у вас все не будет.
Распространенным шаблоном является сохранение указателя буфера, количества буферов и размера выделения. Первоначально установите размер выделения, скажем, 64K. Установите счетчик на ноль. Выделите буфер 64 КБ. Считайте до size-count
байтов в буфер. Если вы нажмете EOF, остановитесь. Если буфер почти заполнен, увеличьте размер выделения на 50% и realloc
буфер.