Проблема с реализацией (стабильного) метода извлечения n байтов из файла - PullRequest
1 голос
/ 01 апреля 2011

Одна из целей библиотеки, которую я разрабатываю, - извлечь определенное количество байтов из файла, в этом конкретном случае я желаю получить доступ к / dev / random для извлечения энтропии.случайные последовательности на основе.

Моя главная проблема с fread - это то, что он будет зависать бесконечно, ожидая больше энтропии, и это нежелательно.Мой следующий выбор заключался в том, что я должен был обернуть fread с feof, чтобы брать байты в куски, тогда я мог бы по крайней мере предоставить процент завершения для лучшего опыта, хотя из того, что я мог бы собрать, итерации 1, 2, 3, 4 .. будуттрудно отследить, чтобы получить ровно столько, сколько нужно.

Существует ли в стандарте C метод, позволяющий получить то, что я ищу, точное количество и количество кусков?Если бы я искал тайм-ауты для этого, был бы хорошим вариантом посмотреть потоковый запрос данных?

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Определить «стандарт». Вы имеете в виду стандарт ISO C? POSIX? База стандартов Linux (LSB)? Для POSIX вызов read позволяет вам указать размер буфера, который вы пытаетесь прочитать. Вы можете использовать pselect или poll , чтобы определить, есть ли байты, доступные для чтения, с таймаутом вместо блокировки. В Linux можно использовать вызов «FIONREAD» ioctl , чтобы получить точное количество байтов, доступных для чтения.

Тем не менее, вы должны спросить себя, нужен ли вам этот уровень энтропии. Вы можете (или не можете) иметь возможность прочесть чтение из "/ dev / urandom". Конечно, вам придется определить, так ли это.

0 голосов
/ 01 апреля 2011

Попробуйте это

Вот справочная страница для функции, которая, я думаю, решит вашу проблему.

http://www.manpagez.com/man/3/fgets/

Я только что увидел, что fread не работает, fgetsчитает определенное количество байтов из файлового потока в буфер

...