У меня была именно эта проблема.
Одна проблема в оригинальном посте, if (offset>0)
много раз использовалась в примерах небольших файлов proc.Чтение вызывается несколько раз, пока мы не вернем 0, чтобы указать, что данных больше нет.Таким образом, if (offset>0)
означает, что мы возвращаем (длина буфера) как 0.
Есть 3 способа вернуть данные с помощью этой функции.Посмотрите на комментарии исходного кода, строка 75 и далее :
Для больших файлов (метод 2 из комментариев) я сделал следующее: -
- Для каждогобольшая часть ваших больших данных, скопируйте 'buffer_length' данных в 'buffer'.
- Установите '* start' (или в вашем случае * buffer_location) в 'buffer'.
- верните суммуданных, которые вы написали (обычно 'buffer_length')
Наконец, все данные будут записаны, и вы вернете 0.
Это сработало для меня с несколькими мегабайтами данных.