Вы правы, что неблокирующий режим не имеет преимуществ для обычных файлов и не разрешен. Было бы неплохо, если бы был установлен вторичный флаг, который мог бы быть установлен вместе с O_NONBLOCK
, чтобы изменить это, но из-за того, как работают кэш и виртуальная память, определить, что правильно «неблокировать», непросто "поведение для обычных файлов будет означать. Конечно, будут условия гонки, если вы не позволите программам блокировать память, связанную с файлом. (Фактически, одним из способов реализации своего рода не спящего ввода-вывода для обычных файлов было бы mmap
файл и mlock
карта. После этого при любой разумной реализации read
и write
никогда бы не спит, пока смещение файла и размер буфера остаются в границах отображаемой области.)