วิธีการป้องกันเอาท์พุทคอนโซลแบบสุ่มไม่ให้แตกขั้ว?
มีคำถามมากมายเกี่ยวกับ SE cat /dev/urandomที่แสดงวิธีการกู้คืนจากสถานีทำลายโดยมี สำหรับผู้ที่ไม่คุ้นเคยกับปัญหานี้ - นี่คือสิ่งที่เกี่ยวกับ: คุณดำเนินการcat /dev/urandomหรือเทียบเท่า (ตัวอย่างcat binary_file.dat) ขยะถูกพิมพ์ ที่จะโอเค ... ยกเว้น terminal ของคุณยังคงพิมพ์ขยะแม้กระทั่งหลังจากที่คำสั่งเสร็จเรียบร้อยแล้ว! นี่คือภาพหน้าจอของข้อความที่พิมพ์ผิดที่อยู่ในความเป็นจริงเอาต์พุต g ++: ฉันเดาว่าคนที่ถูกต้องเกี่ยวกับข้อผิดพลาด C ++ บางครั้งก็เป็นความลับเกินไป! วิธีการแก้ปัญหาตามปกติคือการเรียกใช้stty sane && resetแม้ว่ามันจะน่ารำคาญที่จะเรียกใช้ทุกครั้งที่เกิดเหตุการณ์นี้ ด้วยเหตุนี้สิ่งที่ฉันต้องการมุ่งเน้นในคำถามนี้คือเหตุผลดั้งเดิมว่าทำไมสิ่งนี้จึงเกิดขึ้นและวิธีป้องกันมิให้เครื่องแตกหลังจากคำสั่งดังกล่าวออก ฉันไม่ได้มองหาวิธีแก้ปัญหาเช่นการส่งคำสั่งที่ละเมิดไปtrหรือxxdเพราะคุณต้องรู้ว่าโปรแกรม / ไฟล์เอาต์พุตไบนารีก่อนที่คุณจะเรียกใช้ / พิมพ์จริงและจำเป็นต้องจดจำทุกครั้งที่คุณส่งออกข้อมูลดังกล่าว . ฉันสังเกตเห็นพฤติกรรมเดียวกันใน URxvt, PuTTY และ Linux frame buffer ดังนั้นฉันไม่คิดว่านี่เป็นปัญหาเฉพาะเทอร์มินัล ผู้ต้องสงสัยหลักของฉันคือการที่เอาท์พุทแบบสุ่มมีบางส่วนหลบหนีรหัส ANSI ที่พลิกเข้ารหัสอักขระ (ในความเป็นจริงถ้าคุณเรียกใช้cat /dev/urandomอีกครั้งโอกาสที่มันจะUnbreakขั้วซึ่งดูเหมือนจะยืนยันทฤษฎีนี้) หากนี่ถูกต้องรหัสหลบหนีนี้คืออะไร มีวิธีมาตรฐานในการปิดการใช้งานหรือไม่