📄 p8-10.c
字号:
#include <signal.h>int flushinp();int def_prog_mode();int def_shell_mode();int doupdate(void);static void tstp(int dummy){ sigset_t mask, omask; struct sigaction act, oact; T(("tstp() called")); /* 用户可能已改变程序方式下的tty位, 因此保存它们 */ def_prog_mode(); /* 阻塞窗口改变和计时信号。阻塞计时信号的原因是因为应用利用计时器重绘窗口 */ (void)sigemptyset(&mask); (void)sigaddset(&mask, SIGALRM);#ifdef SIGWINCH (void)sigaddset(&mask, SIGWINCH);#endif (void)sigprocmask(SIG_BLOCK, &mask, &omask); /* 结束窗口方式,这也导致重置终端状态回到原来的方式 */ endwin(); /* 放开SIGTSTP */ (void)sigemptyset(&mask); (void)sigaddset(&mask, SIGTSTP); (void)sigprocmask(SIG_UNBLOCK, &mask, NULL); /* 再次发送SIGSTP给该进程并悬挂它 */ act.sa_handler = SIG_DFL; sigemptyset(&act.sa_mask); act.sa_flags = 0;#ifdef SA_RESTART act.sa_flags |= SA_RESTART;#endif /* SA_RESTART */ sigaction(SIGTSTP, &act, &oact); kill(getpid(), SIGTSTP); /* 窗口进程被悬挂,经过一段时间后进程被恢复运行 */ T(("SIGCONT received")); sigaction(SIGTSTP, &oact, NULL); /* 扫出在cur_term->Filedes上的任何输出 */ flushinp(); /* 如果在悬挂期间用户修改了tty 状态,则他会希望有这种改变。 因此,保存新的"缺省"终端状态*/ def_shell_mode(); /* 恢复程序方式的tty状态 */ doupdate(); /* 重置SIGTSTP信号句柄 */ (void)sigprocmask(SIG_SETMASK, &omask, NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -