使用tcgetattr()和tcsetattr()时我需要处理哪些信号?

时间:2011-09-08 04:12:19

标签: terminal posix signals

POSIX 2008 says

  

应该编写使用这些函数的程序来捕获所有函数   信号并采取其他适当的行动,以确保当   程序终止,无论是否计划,终端设备   状态恢复到原始状态。

关于使用tcgetattr()和tcsetattr()来改变终端设备的状态。一般来说,需要处理哪些信号以及必须采取哪些“其他适当行动”?如果一般无法回答这个问题,那么当使用tcgetattr()和tcsetattr()来关闭终端回声时,哪些信号/动作是合适的?

1 个答案:

答案 0 :(得分:2)

评论的要点是tcsetattr将改变封闭终端的属性。因此,如果您编写一个程序来禁用终端回显并且该程序退出而不重置该值,那么它将在会话期间被禁用(除非另一个程序显式重新启用它)。

适当的做法是,如果要更改属性,请在更改之前保存所有旧值(然后在退出之前回滚更改)。这可以在信号处理程序中完成,这是建议关注的内容。