현재 Linux 파일 설명자를 사용하여 직렬 포트를 통해 외부 장치와 통신하고 있으며 반환된 결과를 장치에 복제할 수 있는지 궁금합니다.
특히 파일 설명자 5를 사용하여 Raspbian 장치의 직렬 포트 /dev/ttyACM0을 읽고 씁니다.
exec 5<>"/dev/ttyACM0"
내부적으로는 응답이 들어올 때마다 포트에서 지속적으로 데이터를 읽어 다음 단계를 결정하는 기능을 실행합니다.
function __processing__(){
local line
while read line<&5; do
... some processing ...
... echo $line > "log.txt"
done
}
직렬 포트에 단일 명령을 보내고 백그라운드 기능이 응답을 처리하게 하면 제대로 작동합니다. 포그라운드에서 XMODEM 프로토콜을 사용하여 데이터를 전송하기 위해 다른 소프트웨어를 사용하기 시작했을 때 문제가 발생했습니다.
sx -vv -k "./firmware_update.bin" >&5 <&5
ACK 응답은 로그 파일에 기록되지만 프로세스는 항상 ACK에서 시간 초과됩니다. 그래서 나는 백그라운드 프로세스가 FD5를 읽고 sx
아무것도 남기지 않기 때문이라고 생각합니다. 그런 다음 백그라운드 프로세스를 제거하고 명령을 실행해 보았 sx
으며 모든 패킷을 성공적으로 보냈을 때 의심이 확인되었습니다.
하지만 실제로 다음에 수행할 작업을 알 수 있도록 직렬 포트에서 기록된 응답이 없습니다.
그래서 내 질문은: 방해하지 않고 응답을 계속 읽을 수 있도록 배경 기능을 재정의하는 방법이 있습니까 sx
? tee
명령을 사용하여 stdout에서 데이터를 복사 할 수 있다는 것을 알고 있습니다 . FD5를 사용하여 비슷한 효과를 얻을 수 있습니까?
P/s: Linux에서 파일 설명자와 파이프를 사용하는 것은 이번이 처음이므로 출력 리디렉션에 대한 많은 기술을 모릅니다. 다들 감사 해요.