O_NONBLOCK
не влияет на дескрипторы файлов (*).write()
s, как правило, уже буферизуются ОС в кеше, и сама ОС / файловая система решает, когда данные должны попасть на диск.O_NONBLOCK
следует использовать только с сокетами, fifos и трубами.
Если вам нужен ввод / вывод асинхронного файла, вам следует проверить aio_write()
.
В противном случае,Повторим, что write()
уже асинхронен и не ожидает завершения ввода-вывода диска, если вы не используете O_SYNC
или O_DSYNC
или O_DIRECT
flags.
(*) В Linux open () ingфайл с O_NONBLOCK
- это всего лишь подсказка, что программа не намеревается читать или записывать в файл - но делает только вызовы слоя ioctl()
.
Edit1. Проверка реальности, что я не мечтаю. Согласно POSIXv6 :
O_NONBLOCK
При открытии FIFO с настройкой O_RDONLY или O_WRONLY:
[... skip ...]
При открытииоткрывается специальный блок или специальный символьный файл, который поддерживает неблокирование:
[... skip ...]
В противном случае поведение O_NONBLOCK не определено.