我正在创建自己的Shell,并希望在Linux发行版的任何用户按下ctrl+c时禁用^C。我不需要处理信号SIGINT,因为我已经做了,以免程序在ctrl+c上停止运行。我只是想知道如何隐藏这两个字符^C。是否有可以调用的函数或要在程序启动时设置的环境变量?
编辑
尝试过这个方法。它能在按下ctrl-c时去掉^C,但仍会显示一个方块字符,似乎是EOT(003 ASCII码)。
编辑
int a = fork();
if (!a) {
char *cmd[] = {"/bin/stty", 0 };
char *cmd_args[] = {" ", "-echoctl", 0};
execve(cmd[0], cmd_args, env);
}
尝试过这个方法。它能在按下ctrl-c时去掉^C,但仍会显示一个方块字符,似乎是EOT(003 ASCII码)。
execvp()
而不是execve()
,并且不提供环境变量。如果您确定需要特殊环境而不是继承的环境,请查看是否有execvpe()
可用。请注意,如果在启动程序之前设置了echoctl
,当您的程序被控制退出时,重置它会很有礼貌(如果程序失去控制而退出,则当然无法做到这一点)。请注意,cmd_args
数组应该像这样:char *cmd_args[] = { "stty", "-echoctl", 0 };
。 - Jonathan Leffler