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

发布于 2024-12-04 01:34:37 字数 381 浏览 1 评论 0原文

POSIX 2008

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

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

POSIX 2008 says:

A program that uses these functions should be written to catch all
signals and take other appropriate actions to ensure that when the
program terminates, whether planned or not, the terminal device's
state is restored to its original state.

about using tcgetattr() and tcsetattr() to change the terminal device's state. In general, which signals need to be handled and what "other appropriate actions" must be taken? If this cannot be answered in general, which signals/actions are appropriate when using tcgetattr() and tcsetattr() to turn off terminal echo?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坠似风落 2024-12-11 01:34:37

注释的要点是 tcsetattr 将更改封闭终端的属性。因此,如果您编写一个禁用终端回显的程序,并且该程序退出时没有重置该值,那么它将在会话期间被禁用(除非另一个程序明确地重新启用它)。

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

The point of the comment is that tcsetattr will change the properties of the enclosing terminal. Thus, if you write a program that disables terminal echo and that program exits without resetting the value, then it will be disabled for the duration of the session (unless another program explicitly re-enables it).

The appropriate thing to do is, if you are going to change an attribute, save all of the old values before you change them (and then roll back the changes before exiting). This can be done in a signal handler, which is what the recommendation focuses on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文