무척 느긋한 리얼타임성을 요구하는 프로그램이군요...

하지만 결국 5초는 지켜야 하는 것이라면

저 같은 경우에는 아주 정확한 처리가 필요하다면
디바이스 드라이버 안에 두고
타이머 인터럽트나
아니면 커널 타이머를 이용합니다.

이때는 디바이스드라이버가 약간의 통신 수행 알고 리즘을 가지고 있는 것이죠

이럴 경우가 아니면

통신을 담당하는 프로세스를 하나 두고
이놈은 절대로 블록 되지 않게 프로그램 합니다.
최소한 1초이내에는 깨어나게 하는 것이죠...

보통은 select 함수를 이용하거나
아니면 알람 시그널을 이용합니다