Как я могу настроить стандартный ввод на неблокирующий в Windows?
На Posix я могу сделать это:
local ffi, F_SETFL, O_NONBLOCK = require 'ffi', 4, 2048
ffi.cdef 'int fcntl(int fd, int cmd, long arg);'
ffi.C.fcntl(0, F_SETFL, O_NONBLOCK)
После этого вызовы io.read
возвращаются немедленно, а не ждут ввода.
Как я могу сделать это в Windows? Поддержка консоли Cygwin — это все, что мне нужно. Фрагмент выше работает без ошибок, но не имеет никакого эффекта.
SetNamedPipeHandleState
. Обратите внимание, что это не обычный асинхронный ввод-вывод (см. этот ответ), но мы не можем изменить режим открытого файла с насколько я знаю, синхронный с асинхронным. - person Eryk Sun   schedule 22.05.2019io.read
немедленно возвращалось независимо от того, есть ли что-нибудь в буфере или нет. - person user11536834   schedule 22.05.2019_get_osfhandle(fd)
. Я не знаю о Cygwin. - person Eryk Sun   schedule 22.05.2019