Реализация команд Tftp для извлечения удаленных данных в локальный кольцевой буфер

Я искал реализацию, использующую наборы команд tftp, которые могут извлекать данные с удаленного сервера, но вместо этого получая данные полностью в целом, он извлекает данные в локальный кольцевой буфер размером меньше, чем размер удаленного файла, и перезаписывает данные после кольцо было обведено. Таким образом, если какой-либо процесс использует данные в течение времени доступности данных, он завершается успешно, в противном случае он теряет данные. Например, скажем, у меня есть 100 МБ данных в удаленном файле и (хотите создать?) Кольцевой буфер размером 10 МБ локально. Таким образом, он выбирает удаленные данные и помещает их в кольцевой буфер. После того, как 10 МБ обведены, начинается перезапись. Любое предложение будет высоко оценено. Заранее спасибо.

1 ответ

Решение

Поскольку вы используете Linux, данные будут поступать на ваш tftp-клиент через сокет Linux. Обычно вы бы позвонили read на этом сокете, чтобы получить данные.

Однако, если вы хотите использовать кольцевой буфер, вы можете просто установить опцию сокета PACKET_RX_RING и читать из отображенного в памяти адресного пространства (доступно в Linux 2.4/2.6/3.x в соответствии с документацией packet_mmap) вместо вызова read, Нет необходимости реализовывать кольцевой буфер самостоятельно.

Образец кода можно получить из вики, с которой он связан, из соответствующего вопроса переполнения стека или с разных веб-сайтов.

Другие вопросы по тегам