Saya membaca dari port serial yang terhubung ke perangkat gps yang mengirimkan string nmea.
Doa yang disederhanakan untuk mengilustrasikan poin saya:
$ 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
Jika saya mencoba membaca dari sebuah pipa, awk buffer input sebelum mengirimnya ke 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
Bagaimana saya bisa menghindari buffering?
Sunting : Kyle Jones menyarankan agar kucing menahan outputnya tetapi itu tampaknya tidak terjadi:
$ 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
Ketika saya memikirkannya: Saya berpikir bahwa sebuah program menggunakan penyangga baris saat menulis ke terminal dan "penyangga biasa" untuk semua kasus lainnya. Lalu, mengapa kucing tidak buffering lebih? Apakah port serial memberi sinyal EOF? Lalu mengapa kucing tidak diberhentikan?