Хорошо, если вы хотите понять, как управлять этим напрямую, начните с подробного изучения справочных страниц по Linux (или OS X) для termios
, fcntl
и stty
. Это много вещей, но вы увидите, для чего все эти флаги.
Обычно ваш ввод с клавиатуры буферизуется: драйвер терминала собирает его, пока вы не нажмете return. Флаг ~termios.ICANON
отвечает за отключение буферизации линии, поэтому вы можете сразу увидеть, что пользователь вводит.
С другой стороны, если вы хотите, чтобы ваша программа отвечала только тогда, когда пользователь нажимает клавишу, вы НЕ ХОТИТЕ os.O_NONBLOCK
: это означает, что ваша программа не будет блокироваться при чтении с клавиатуры, но ваша чтение вернет пустую строку. Это подходит для игр с живым действием, в которых все происходит независимо от того, реагирует пользователь или нет.