Nmea dizeleri gönderen bir gps cihazına bağlı seri bir porttan okuyorum.
Amacımı göstermek için basitleştirilmiş bir çağrı:
$ 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
Bunun yerine bir borudan okumaya çalışırsam, awk stdout'a göndermeden önce girişi tamponlar.
$ 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
Tamponlamayı nasıl önleyebilirim?
Düzenleme : Kyle Jones, kedinin çıktısını tamponladığını ancak bunun gerçekleşmediğini belirtti:
$ 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
Düşündüğümde: Bir programın bir terminale yazarken arabelleğe alma işlemini ve diğer tüm durumlar için "normal arabelleğe alma" kullandığını düşündüm. Öyleyse, kedi neden daha fazla tamponlamıyor? Seri port EOF'a sinyal veriyor mu? Öyleyse kedi neden sonlandırılmıyor?