читать, читать частичное чтение - PullRequest
0 голосов
/ 23 ноября 2018

Я не могу найти информацию об этом в документации.

В документации по системному вызову read сказано, что она может прочитать меньше, чем указано.read пытается читать несколько раз?

Я знаю, что fread - это оболочка для read.Когда я вызываю fread, возможно ли, что он будет читать из потока несколько раз, пока не получит 0 или не прочитает указанные байты, или он попытается прочитать только один раз?

Я читаю с устройства charсозданный в моем модуле ядра, он передает информацию из структуры данных и поддерживает частичное чтение.Я заинтересован в чтении всех данных, пока они не вернут 0.

спасибо

1 Ответ

0 голосов
/ 24 ноября 2018

Общая идея read заключается в том, что он возвращается, как только появятся некоторые данные¹.С точки зрения приложения, это все, на что вы можете рассчитывать.

Если вы реализуете обратный вызов read в драйвере ядра, вам решать, когда read решит вернуть некоторые данные.Но приложения будут ожидать, что read вызовы могут быть частичными, и они должны вызывать read в цикле, если им действительно нужно определенное количество байтов.Некоторые приложения хотят, чтобы read не блокировался, поэтому было бы плохой идеей блокировать вызов read, если доступны некоторые данные.

Функциональные блоки fread блокируются до тех пор, пока не будет прочитано столько байтов, сколькобыли запрошены, пока не будет достигнут конец файла или пока не произойдет ошибка.Он работает, вызывая read в цикле.

¹ Вопрос о том, когда и когда read может вернуть 0 байтов, выходит за рамки этого ответа.
² Или, по крайней мере, должен.Багги-приложения существуют.

...