LINUX.ORG.RU

popen и объем пришедшего


0

0

Открываю канал, выполняю скажем ls, а потом содержимое в буфер кладу. Как можно узнать размер содержимого, чтобы памяти на буфер выделить? fstat с FILE* не работать :(

anonymous

Ты попробуй пойти в ванну, открыть кран, и как-нить узнать сколько воды, в данный момент, находится в водохранилище...

Узнать полный размер данных которые программа пишет в канал нельзя..

Если читаешь текстовый вывод программы, то (как вариант) читай его по строкам, обрабатывай каждую отдельно.

Или я тебя не так понял? fstat с FILE * и так не работает.. Она работает с файловыми дескрипторами типа int.

Или тебе надо узнать сколько ты данных положил в буфер? Но имхо это какой-то глупый вопрос.. Сколько прочитал столько там и есть..

OxiD ★★★★
()

никак нельзя узнать в принципе.

если бы это было возможно, какой, по вашему мнению
был бы размер у popen("/usr/bin/yes") ?

idle ★★★★★
()

это можно сделать в единственном случае - когда протокол обмена с приложением подразумевает передачу размера вывода. Как правило размер идет вначале в заголовке фиксированной длины - сначала читаешь заголовок (заранее известной длины), анализируешь его, понимаешь скоко нуно прочитать и вперед... но такие протоколды как правило используется при работе с сокетами напр, но никак не в шелле...... :-)

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.