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

标签 c shell signals

我实际上正在尝试做一个 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/

相关文章:

c - 传递常量矩阵

shell - 从多个文本文件中提取公共(public)行并显示原始行号

c - 了解 wait() 和 signal()

c++ - 由于参数变量中的 %s,sprintf 崩溃

c - ANSI C 和 C 编程语言有什么区别?

c - 为什么 MACRO 会出现这种行为?

Linux shell (Bash/Z shell) - 在特定目录下更改背景颜色

windows - 如何自动关闭 Azure VM?

c - 家长和 child 通过信号同步的问题

未收到/未连接来自 QRunnable 的 Qt 信号