직렬 장치가 있습니다 /dev/ttyAMA0
. 장치와 통신하기 위해 C로 작성된 프로그램이 있습니다. 하지만 C 프로그램 외에도 다음과 같은 일부 구성 데이터를 터미널에서 입력해야 하는 경우가 있습니다 echo xxx >> /dev/ttyAMA0
. 문제는 장치가 이 구성 입력(예: 이와 같은 것 parameter xxx set
)으로 응답하지만 읽지 않는다는 것입니다. 필요) 이 응답을 수신하므로 직렬 포트 버퍼에 버퍼링됩니다. C 프로그램에서 데이터를 읽어야 하는데 응답이 이미 버퍼링되어 있어서 신경쓰지 않기 때문에 C 프로그램에 문제가 발생합니다.
그래서 내 질문입니다. 터미널에서 장치의 버퍼를 어떻게 플러시합니까? C에서 이 작업을 수행할 수 있다는 것을 알고 있지만 tcflush(sfd, TCIOFLUSH);
터미널에서 수행해야 합니다.
답변1
나는 이 대답이 몇 년 늦었다는 것을 알고 있습니다... 그러나 다음과 같은 명령은 bash에서 작동해야 합니다:
read garbage </dev/ttyAMA0
이 줄은 bash 내장 "read" 명령을 사용하여 직렬 수신 버퍼에서 ASCII 문자 줄을 읽고 이를 "garbage"라는 변수에 저장합니다. "<" 리디렉션 연산자는 "read"에게 기본 stdin 대신 직렬 포트 장치 파일에서 입력을 받도록 지시합니다. 버퍼에서 여러 줄의 문자를 읽어야 하는 경우 이 명령을 루프에 넣을 수 있습니다.
답변2
perl
tcflush()
POSIX 모듈에는 인터페이스가 있습니다:
perl -MPOSIX -e 'tcflush(0, TCIFLUSH)' < /dev/ttyAMA0
perldoc POSIX
자세히보다.