ใน Unix/Linux ทุกอย่างเป็นไฟล์
ทุกครั้งที่คุณสะท้อนไปยังอุปกรณ์ (/dev) คุณกำลังเปิดเพื่อเขียน จากนั้นจึงเขียนปิด วิธีง่ายๆ ในการจับเอาต์พุตของอุปกรณ์นั้นทำได้ง่ายเพียง
tail -f /dev/ttyACM0 (-f เปิดบรรทัดไว้)
สิ่งนี้จะส่งสัญญาณออกและทำให้อุปกรณ์เปิดอยู่
ตัวอย่างเช่น ในกรณีของฉัน ฉันมีโครงการหนึ่งที่อ่านเซ็นเซอร์ใน Arduino และส่งข้อมูลแบบขนานไปยังเซิร์ฟเวอร์และพอร์ตอนุกรมด้วย
ตอนนี้ ttys อนุกรมจำเป็นต้องจับคู่ความเร็วบนระบบปฏิบัติการและอุปกรณ์ ดังนั้นบางครั้งคุณจึงไม่ได้รับเอาต์พุตเว้นแต่คุณจะมีความเร็วและการตั้งค่าที่เหมาะสม หากคุณพิมพ์เทอร์มินัล
stty /dev/ttyACM0
คุณจะได้รับการกำหนดค่าความเร็วปัจจุบัน
ดังนั้นคุณสามารถลองสิ่งนี้ (แต่ไม่ได้ผลเสมอไป)
ปรับปรุง ++
#!/bin/bash
input="/dev/ttyACM1" #ตั้งค่าอุปกรณ์
stty -F $input 115200 นาที 0
#เพิ่มเพื่อเริ่มต้นบรรทัด
stty -F $input -brkint -icrnl -imaxbel -opost -onlcr -isig
stty -F $ อินพุต -icanon -iexten -echo -echoe -echok -echoctl -echoke
echo "ver" >>$input #ส่งคำสั่ง
tail -f $input & #reads และรอตลอดไป
นอน2วิ
killall tail # อาจเป็นปัญหาหากหางอื่นทำงาน
ในกรณีของฉันที่เชลล์ส่งออกสิ่งนี้ (จะไม่ใช้คำสั่ง ver เนื่องจากไม่ได้ใช้งาน แต่หลังจากนั้นจะอ่านจาก tty ไม่ว่า tty จะส่งอะไรก็ตาม) เมื่อส่วนท้ายของการเปลี่ยนแปลงหยุดลงก่อนหน้านี้และเอาต์พุตจะถูกตัดทอนใน 2 วินาที
1970-00-00-00:00:00: เริ่มต้น SDCard...
1970-00-00-00:00:00: เสร็จสิ้น SDCard Init
1970-00-00-00:00:00: กำลังอ่านการกำหนดค่า...
1970-00-00-00:00:00: เสร็จแล้ว...
1970-01-01-00:00:01 : IP : 192.168.22.199
อีกครั้ง แฟล็ก -f ทำให้เทอร์มินัลเปิดอยู่ แต่ถ้าฉันถอดออก ฉันจะไม่ได้อะไรเลย (ฉันสูญเสียเอาต์พุตบัฟเฟอร์)
นั่นคือเหตุผลที่ฉันคิดว่าโปรแกรม c ขนาดเล็กจะทำได้ดีกว่า
หวังว่านี่จะช่วยได้