POSIX 2008 says:
应该编写使用这些函数的程序来捕获所有函数 信号并采取其他适当的行动,以确保当 程序终止,无论是否计划,终端设备 状态恢复到原始状态。
关于使用tcgetattr()和tcsetattr()来改变终端设备的状态。一般来说,需要处理哪些信号以及必须采取哪些“其他适当行动”?如果一般无法回答这个问题,那么当使用tcgetattr()和tcsetattr()来关闭终端回声时,哪些信号/动作是合适的?
答案 0 :(得分:2)
评论的要点是tcsetattr
将改变封闭终端的属性。因此,如果您编写一个程序来禁用终端回显并且该程序退出而不重置该值,那么它将在会话期间被禁用(除非另一个程序显式重新启用它)。
适当的做法是,如果要更改属性,请在更改之前保存所有旧值(然后在退出之前回滚更改)。这可以在信号处理程序中完成,这是建议关注的内容。