⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p8-10.c

📁 SUN Solaris8平台下进程间通信
💻 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 + -