Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: timmynovak 12 Října 2011, 17:24:25
-
Ahoj, mám následující script:
#!/bin/bash
while true
do
read LINE < /dev/ttyUSB0
...nějaká činnost.... (validace, zápis do db ...)
echo $LINE >> /home/xxx/serial.log
done
A někdy se stane, že se mi nějaký řádek přenášený po sériové lince celý ztratí. Vysvětluji si to zatím tím, že v nějaké_činnosti se skript zdrží dlouho a nestihne udělat read LINE - je to možné? Vždy jsem si myslel, že tma je nějaký buffer. Řádků je cca 5 do minuty, některé jdou rychle za sebou (<1s). Díky.
-
tak jsem nijak nepokročil, nikdo jste se s ničím takovým nesetkal?
-
Dělal jsem s tím trochu pokusy, a verze
while read LINE
do
...nějaká činnost.... (validace, zápis do db ...)
echo $LINE >> /home/xxx/serial.log
done < /dev/ttyUSB0
se mi zdála spolehlivější, ale mohla to být náhoda ;)
-
zkusim, děkuji
-
zkusil jsem, ale ani to není pořád zcela ideální. jak to když tak někdo řešíte, když potřebujete data ze sériového portu posílat do databáze? pochybuji, že bych byl jediný, kdo má tento problém:( díky
-
mozna je to trosku s krizkem po funuse, ale dival ses na prikaz ulimit ? konkretne asi ulimit -p ?
-
Skusil si to riešiť cez ruru ? Pipe ?
-
pomohl bych si, kdybych použil &?
...nějaká činnost.... (validace, zápis do db ...) &
rouru myslíš jak? styl echo | mysql ? Ano, tak to přesně dělám.
díky.
-
Ještě mě napadla jedna věc, některé programy čtou stdin, i když ho třeba nepotřebují, a pak je lepší použít nestandardní redirect (zde na fd 3 místo standardní fd 0) třeba takto
while read -r -u 3 LINE; do
...nějaká činnost.... (validace, zápis do db ...)
echo $LINE >> /home/xxx/serial.log
done 3< /dev/ttyUSB0