Portál AbcLinuxu, 15. července 2025 10:22
tee </dev/ttyS0 >prvni_roura druha_roura treti_roura .... n-ta_roura
Něco jsem vytvořil. Jmenuje se to vee a zatím toho moc neumí. Po vyčerpání vnitřního bufferu se zablokuje.
Časem zkusím naimplementovat dvě strategie. Jedna bude bude dynamické zvětšování bufferu, druhá bude zahazování dat či zabití líného konzumenta.
roura "kapacitu" defaultne 4KB
Hovoříme-li o Linuxu, tak to tak bývalo do verze 2.6.11. Od té doby je kapacita roury 64 KiB. Ty 4 kila je pouze garantovaná atomicita zápisu.
Podívejte na nástroj socat.
Skoušel jsem to s ním přes UNIX sockety, ale ve výsledku mi šel první znak prvnímu čtecímu procesu, druhý znak druhému a zase třetí znak prvnímu procesu atd.
Určitě by to šlo obejít pře multicastové UDP pakety.
Ale mnohem jednodušší bude si na to napsat vlastní program.
Problém ale je, co dělat s čtecím procesem, který se zablokuje. Mají se data pozdržet jen pro něj, má se zastavit přeposílání všem procesům, mají se vůbec data bufferovat, nebo se mají nechat propadnout?
mysql -uwdog -prur -e "INSERT INTO \`ttyS0\` ( \`id\` , \`timestamp\` , \`text\` ) VALUES ( NULL , NULL , '`cat /dev/ttyS0 | head -n 1`')" robot
ii=0 cat /dev/ttyS0 | while read LINE do ii=$(($ii+1)) mysql -uwdog -prur -e "INSERT INTO \`ttyS0\` ( \`id\` , \`timestamp\` , \`text\` ) VALUES ( $ii , NULL , '$LINE')" robot & done
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.