Читать, читать частичное чтение

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

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

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

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

Спасибо

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам