Общая идея read
заключается в том, что он возвращается, как только появятся некоторые данные¹.С точки зрения приложения, это все, на что вы можете рассчитывать.
Если вы реализуете обратный вызов read
в драйвере ядра, вам решать, когда read
решит вернуть некоторые данные.Но приложения будут ожидать, что read
вызовы могут быть частичными, и они должны вызывать read
в цикле, если им действительно нужно определенное количество байтов.Некоторые приложения хотят, чтобы read
не блокировался, поэтому было бы плохой идеей блокировать вызов read
, если доступны некоторые данные.
Функциональные блоки fread
блокируются до тех пор, пока не будет прочитано столько байтов, сколькобыли запрошены, пока не будет достигнут конец файла или пока не произойдет ошибка.Он работает, вызывая read
в цикле.
¹ Вопрос о том, когда и когда read
может вернуть 0 байтов, выходит за рамки этого ответа.
² Или, по крайней мере, должен.Багги-приложения существуют.