gpt4 book ai didi

c - 中断组合键(例如 CTRL-C)如何以及何时转换为信号?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:43 24 4
gpt4 key购买 nike

使用 Linux 操作系统,我需要将所有击键从远程连接透明地传递到本地硬件连接。这对于除信号之外的所有内容都是相当直接的。我知道我可以为捕获和传递击键的每个信号注册处理程序,但这似乎是一种黑客攻击,可能不适用于边缘情况(如果有人更改中断键组合映射怎么办,我会两次传递击键,等等。 ).

为了想出一个更好的解决方案,我真的需要更多地了解关键组合,IE:CTRL-C,如何变成信号,IE:SIGINT。

  1. 组合键如何成为信号(在内核、客户端应用程序、运行时)?
  2. 击键是否仍然通过?如果 CTRL-C 有一个空处理程序,STDIN 是否仍然得到 CTRL-C?
  3. 不将任何击键解释为信号组合的最佳方法是什么?这可以在 TTY 或环境设置中完成吗?

最佳答案

  1. 终端的线路规程(TTY 子系统中的一个层)将按键组合转换为信号。这是描述 from Wikipedia :

For example, the standard line discipline processes the data it receives from the hardware driver and from applications writing to the device according to the requirements of a terminal on a Unix-like system. On input, it handles special characters such as the interrupt character (typically Control-C) and the erase and kill characters (typically backspace or delete, and Control-U, respectively) and, on output, it replaces all the LF characters with a CR/LF sequence.

  1. 按键没有传递,当信号出现时它被抑制了。如果进程没有 SIGINT 处理程序,内核将终止它。

  2. 您显然可以覆盖它:这就是像 ssh 这样的工具的工作方式。您可以通过将终端设置为“原始”模式轻松地做到这一点,例如使用 shell 命令 stty raw。如果您随后运行 cat -vE,您可以按任意键并看到它们以脱字符号显示。确保计划好关闭终端的方法,因为显然您不能再使用 Ctrl-C/Z/D 退出终端。

关于c - 中断组合键(例如 CTRL-C)如何以及何时转换为信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56031413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com