如何不在我的 shell 上显示信号?

How to not display signals on my shell?

我实际上正在尝试 shell。那是一个学校项目。它工作得很好,但我想处理信号(例如 ^C^D)。

所以我使用了 signal.h 库(我在 Maverick OS),它似乎工作正常,我的 [=33= 】 不会退出的。不过还是有点问题。

^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 等替代模式 模式。请注意,这些是由各种(有时)相互关联的设置构建而成的。因此,您可以从修改现有设置开始,以更改您感兴趣的功能。