当您从终端发送控制字符时,例如,如果您按Ctrl+C
,线路纪律将接收表示该控制字符的字节(在0x03
的情况下Ctrl+C
)。
现在代替线路纪律将字节发送0x03
到与终端关联的程序,它将改为向其发送信号SIGINT
(或者如果它是不同的控制字符,它将执行其他操作)。
现在有没有办法可以预防线路纪律从处理控制字符开始,所以我想要的是与终端关联的程序接收表示控制字符的实际字节(0x03
在我们的例子中)。
答案1
在 Linux 上,你可以使用
$ stty intr undef
在相关终端上。这会将中断字符设置为空(“undef”)。要恢复你会使用
$ stty intr ^c
man stty
详情请参阅。
答案2
不同的控制字符[...]控制字符
我注意到复数。您正在寻找非规范输入模式,在 POSIX 标准之前称为原始模式。这是使用 GNU Readline、ZLE 或 libedit 的应用程序采用的模式。他们的代码使用tcgetattr()
、cfmakeraw()
和tcsetattr()
库函数或类似函数设置它。这些也是 的基础stty raw
。 (stty sane
如果你玩这个,请注意它的存在。)
进一步阅读
- https://stackoverflow.com/a/39302351/340790
- POSIX 终端接口。维基百科。
cfmakeraw()
。 NetBSD 手册页。 2004年。