如何读取 Ctrl+C 作为输入

ipn*_*nah 3 c c++ linux terminal

(在Linux中)

我找到的方法都是用的signal

难道就没有别的办法了吗?我能做些什么来让终端将其放入输入缓冲区吗?

Sam*_*hik 5

为了“读取 CTL+C 作为输入”而不是让它生成 a,SIGINT有必要使用tcsetattr()来清除cc_c[VINTR]或清除ISIG标志,如我链接到的手册页中所述,此处。

您需要tcgetattr首先使用 来读取当前的终端设置,进行相应的调整,然后tcsetattr进行设置。

您应该确保当您的程序终止时,终端设置重置为原始默认设置,shell 并不一定会为您将它们重置为默认设置。

  • 虽然这是事实,但它不太可能对 OP 有帮助。尽管要求将 control-C 读取为一个字符,但这可能不会给他们带来多大好处。尤其是它本身 - 一旦这些标志被清除,control-C 组合键会发送什么字符,并且在给定其他默认设置的情况下,它是否会导致发送缓冲区,或者是否需要进行其他更改才能发送字符立即地?(因为,如果不立即发送,用户将按下 Control-C,然后期望程序立即响应,但程序仍将等待输入。) (2认同)