Z>Вы точно в этом уверены? неблокирующий read, это не async, указатель никуда не копируется Z>и в фоне никакие IO операции не производятся.
Z>Он(read) просто скопирует в буфер то, что есть в буфере ОС и отдаст управление, Z>после этого с буфером можно делать что угодно. И файл можно без проблем закрыть.
Z>PS Z>Хотя код конечно странно выглядит, взять хотя бы ручную реализацию std::fill/memset Z>перед read.
Про NONBLOCK — уверен. Я даже пробовал не читать, а писать (фук-ей write) в обычный текстовый файл (открытый без всяких NONBLOCK) и после этого закрывать файл и тоже падает на close().
Про std::memset — конечно лучше. В данном коде я просто вручную забил нулями буфер через for чтобы быть уверенным что дело в не в memset().