我试图写一个shell样的应用程序和斗争的信号阻塞。我想禁用/阻止一些信号,如SIGINT或SIGQUIT,所以当用户按Ctrl+C或Ctrl+\,什么也不会发生。
我做了一些研究,并能够通过使用signal(SIGQUIT, SIG_IGN)
或sigaction()
来做到这一点。
我的问题是信号没有完全被屏蔽。当我在应用程序中按Ctrl+\几次时,它不会像预期的那样退出,但也会显示这个^\
。
另外,因为我使用readline()
来捕获用户的输入,所以当我使用Ctrl+\并按Enter键时,会出现一个奇怪的换行符。
2条答案
按热度按时间zbdgwd5y1#
看来你屏蔽信号很到位当您禁用信号时,当您按下
Ctrl+\
时,您的终端将其发送到您的应用程序。与a
的发送方式相同,当您按键盘上的“A”时,但与“A”不同,Ctrl+\
不会生成任何可打印字符,您的终端无法直接打印它。^\
基本上是不可打印字符的特殊符号。你也会在readline()
结果中得到那个“字符”,这是你看到的奇怪的事情。3xiyfsfu2#
要在C语言中禁用Ctrl+C和Ctrl+Z,可以使用以下函数:
我已经在GNU Linux操作系统中用GCC测试了这段代码,没有任何问题。