Я в свое время пользовался функцией kbhit(); из conio.h, но, если мне не изменяет память, эта функция поддерживается только в DOS и Windows. По крайней мере, про её реализацию в nix я не слышал.
Эта функция не «поддерживается» только в DOS и Windows, а вместе со всем conio.h является «изобретением» программистов Borland и Microsoft и не входит ни в один из стандартов языка Си.
А если серьёзно — очень и очень правильный подход к обучению. Пока мозг открыт для велосипедостроения — надо изучить все основные узлы, на которых они строятся. Потом уже, в старости, можно будет пользовать готовые велосипеды для построения армии велосипедников.
Реализация пользовательского ввода, не блокируещего выполнение программы