fcntl로 nonblock 문자입력받기

xo56의 이미지

리눅스에서 c로 리듬게임을 만드는중입니다

while문이 실행되며 노트가 내려오면서 키보드입력을받아서 맞게입력했나 처리하려고하는데

getchar같은함수로는 입력하지않으면 while문이멈춰서

int flag = fcntl(stdin, F_GETFL);
fcntl(stdin, F_SETFL, flag | O_NONBLOCK);

를 쓰면 nonblock 이 된다고하는데 정확히 어떻게사용해야하는지 모르겠습니다.

키보드입력을해도 입력값을 어떻게저장하고 비교해야하는지 모르겠습니다..

bushi의 이미지

tty 의 nonblocking 은 그 정도로 간단하지 않습니다. tty 에 엄청나게 많은 다양한 기능이 있어서요.
https://www.gnu.org/software/libc/manual/html_node/Noncanon-Example.html
저 문서에서 경고하듯, stdin 은 어지간하면 바꾸지 않는 것을 추천드립니다.
원래대로 복구하지 않고 프로그램을 종료하거나 프로그램이 비정상 종료될 때 현재 사용중인 그 터미널이 망가집니다.