UNIX / Linux IPC: чтение из канала. Как узнать длину данных во время выполнения?

У меня есть дочерний процесс, который генерирует некоторый вывод переменной длины, а затем отправляет его родителю, используя полудуплексный канал. В родителе, как я могу использовать функцию read ()? Поскольку данные могут быть разной длины каждый раз, как я могу знать во время выполнения размер данных, чтобы выполнить какую-либо функцию malloc () для буфера? Можно ли использовать функцию fstat () в дескрипторе файла канала?

Я знаю, что функция read () будет считывать указанное количество байтов, но вернет 0, если достигнут конец файла (не символа EOF) до того, как запрошенные байты будут прочитаны.

Я специально запускаю Ubuntu GNU / Linux с ядром 2.6.27-9.

Все примеры в Richard Stevens & apos; Расширенное программирование в среде UNIX указало либо длину данных при записи в канал, либо полагалось на функцию fgets () stdio.h. Поскольку я обеспокоен скоростью, я хочу как можно больше избегать использования stdio.h.

Будет ли это обязательно быстрее с общей памятью?

Спасибо, -Dhruv

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

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