nmea 문자열을 보내는 gps 장치에 연결된 직렬 포트에서 읽습니다.
내 요점을 설명하기위한 간단한 호출 :
$ awk '{ print $0 }' /dev/ttyPSC9
GPGGA,073651.000,6310.1043,N,01436.1539,E,1,07,1.0,340.2,M,33.3,M,,0000*56
$GPGSA,A,3,28,22,09,27,01,19,17,,,,,,2.3,1.0,2.0*39
$GPRMC,073651.000,A,6310.1043,N,01436.1539,E,0.42,163.42,070312,,,A*67
GPGGA,073652.000,6310.1043,N,01436.1540,E,1,07,1.0,339.2,M,33.3,M,,0000*55
$GPGSA,A,3,28,22,09,27,01,19,17,,,,,,2.3,1.0,2.0*39
대신 파이프에서 읽으려고하면 awk가 stdout에 보내기 전에 입력을 버퍼링합니다.
$ cat /dev/ttyPSC9 | awk '{ print $0 }'
<long pause>
GPGGA,073651.000,6310.1043,N,01436.1539,E,1,07,1.0,340.2,M,33.3,M,,0000*56
$GPGSA,A,3,28,22,09,27,01,19,17,,,,,,2.3,1.0,2.0*39
$GPRMC,073651.000,A,6310.1043,N,01436.1539,E,0.42,163.42,070312,,,A*67
GPGGA,073652.000,6310.1043,N,01436.1540,E,1,07,1.0,339.2,M,33.3,M,,0000*55
$GPGSA,A,3,28,22,09,27,01,19,17,,,,,,2.3,1.0,2.0*39
버퍼링을 피하려면 어떻게해야합니까?
편집 : Kyle Jones는 cat이 출력을 버퍼링한다고 제안했지만 발생하지 않는 것으로 보입니다.
$ strace cat /dev/ttyPSC9 | awk '{ print $0 }'
write(1, "2,"..., 2) = 2
read(3, "E"..., 4096) = 1
write(1, "E"..., 1) = 1
read(3, ",0"..., 4096) = 2
내가 생각할 때 : 프로그램은 터미널에 쓸 때 라인 버퍼링을 사용하고 다른 모든 경우에는 "일반 버퍼링"을 사용한다고 생각했습니다. 그러면 왜 고양이가 더 버퍼링하지 않습니까? 직렬 포트 신호가 EOF입니까? 그러면 왜 고양이가 끝나지 않습니까?