मैं एक nmea तार भेजने वाले एक जीपीएस डिवाइस से जुड़े सीरियल पोर्ट से पढ़ रहा हूं।
मेरी बात को स्पष्ट करने के लिए एक सरल आह्वान:
$ 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
अगर मैं इसके बजाय एक पाइप से पढ़ने की कोशिश करता हूं, तो स्टेकआउट भेजने से पहले इनपुट को जागृत करें।
$ 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
मैं बफरिंग से कैसे बच सकता हूं?
संपादित करें : काइल जोन्स ने सुझाव दिया कि बिल्ली इसका उत्पादन बफ़र कर रही है, लेकिन ऐसा प्रतीत नहीं होता है:
$ 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 है? फिर बिल्ली को समाप्त क्यों नहीं किया जाता है?