Если вы имеете в виду POSIX ssize_t read(int fildes, void *buf, size_t nbyte)
, нет.Не существует стандартного способа установить минимальное количество байтов равным read()
.(Я не могу исключить некоторые реализации, обеспечивающие возможность, но я не знаю ни о каких, и по причинам, которым я должен следовать, я вижу смысл в предоставлении такой возможности для read()
в целом.)
И по очень веской причине: что произойдет, если байты закончатся до того, как будет выполнено запрошенное число?Другой конец канала закрывается, сокет, из которого вы читаете, закрывается, или вы нажимаете на конец файла, из которого читаете, до достижения запрошенного числа байтов.
Что должно read()
тогда?Заблокировать навсегда ожидание байтов, которые либо могут никогда, либо не могут прибыть?В этом случае единственное разумное действие для read()
- вернуть количество прочитанных байтов.
Таким образом, в общем случае вы все равно должны обрабатывать частичные read()
результаты, заставляя «читать минимальное число».байтов "установка бессмысленная.