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