Использование NFSPROC3_READDIRPLUS в C#

Я использую исходный код этого клиента С# для NFS:

https://github.com/DeCoRawr/NFSClient

Все работает нормально, но есть функция, которую я не могу успешно вызвать. Есть две функции, которые выводят список элементов папок: READDIR и READDIRPLUS По сути, READDIR возвращает только пути, READDIRPLUS возвращает все остальные атрибуты.

http://pubs.opengroup.org/onlinepubs/9629799/NFSPROC3_READDIRPLUS.htm

При вызове READDIRPLUS есть два дополнительных параметра, которые я не понимаю, как использовать:

dircount Максимальное количество байтов информации о каталоге, которое должно быть возвращено. Это число не включает размер атрибутов и фрагментов дескриптора файла результата.

maxcount Максимальный размер структуры READDIRPLUS3resok в байтах. Размер должен включать все служебные данные XDR. Сервер может вернуть меньше, чем maxcount байт данных. Что бы я ни пытался, я не могу понять это правильно.

Кто-нибудь когда-нибудь вызывал эту функцию успешно?


person Roman    schedule 12.11.2015    source источник


Ответы (2)


READDIRPLUS очень распространен в версии nfsv3 и выше. dircount и maxcount введены для оптимизации и для того, чтобы четко указать серверу, чего на самом деле хочет клиент. Означает, сколько записей требуется в каждом ответе и сколько памяти клиент выделил для атрибутов каждой записи, когда приходит ответ. если клиент хочет прочитать полные записи каталога, он должен отправить запрос readdirplus в цикле, пока ответ не покажет eof=1 (конец файла). Таким образом, клиент может выбрать значения dircount и maxcount. Часто клиенты используют 8k для dircount и 32k для maxcount. Но это определяется реализацией.

person rskishore    schedule 25.01.2016

В итоге я исправил библиотеку с открытым исходным кодом:

https://github.com/DeCoRawr/NFSClient/tree/master-READDIRPLUS_for_V3?files=1

Существует отдельная ветка, использующая ReadirPlus для NFS v3. Если кому-то это нужно, можно легко отделить библиотеку NFS от клиента с графическим интерфейсом.

person Roman    schedule 26.01.2016