我实际上正在尝试做一个 shell 。那是一个学校项目。它工作得很好,但我想处理信号(例如 ^C
和 ^D
)。
所以我使用了 signal.h lib(我使用的是 Maverick OS),它似乎工作正常,我的 shell 不会退出。但这仍然是一个小问题。
^C
仍然显示在我的术语中,但我不希望显示它。
我使用了信号函数:signal(SIGINT, do_nothing);
do_nothing
函数包含:
void do_nothing(int sig)
{
if (sig)
{
;
}
}
如何删除信号字符?
最佳答案
无论您的程序是否处理信号,终端驱动程序都有其自己的行为。例如(请参阅 termios 手册页),ECHOCTL
设置是相关的:
ECHOCTL
(not in POSIX) If ECHO is also set, terminal special
characters other than TAB, NL, START, and STOP are echoed as
^X, where X is the character with ASCII code 0x40 greater than
the special character. For example, character 0x08 (BS) is
echoed as ^H. [requires _BSD_SOURCE or _SVID_SOURCE]
要了解您的程序实际需要什么,您应该首先熟悉 termios
中描述的规范模式与raw等替代模式模式。请注意,这些是由各种(有时)相互关联的设置构建的。因此,您可以首先修改现有设置来更改您感兴趣的功能。
关于c - 如何不在我的 shell 上显示信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29096267/