日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

实验:sigsuspend(),sigprocmask()

發(fā)布時間:2023/12/1 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验:sigsuspend(),sigprocmask() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
實驗:sigsuspend(),sigprocmask()
源代碼:
  • /*
  • * Program: pause_suspend.c
  • * To test the difference between sigsuspend() and paus().
  • * Author: zsl
  • * Date: 2014-10-17
  • * First release.
  • * 參見網(wǎng)頁:http://blog.csdn.net/liwentao1091/article/details/6619089
  • *
  • * */
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <signal.h>
  • #include <unistd.h>
  • #include <string.h>
  • /*
  • * Handler for SIGINT (Ctrl-C), SIGQUIT (Ctrl-\)
  • * */
  • void sig_func(int signo)
  • {
  • if ( SIGINT == signo ) // just print a line.
  • {
  • printf(" SIGINT is processing...\n ");
  • }
  • if ( SIGQUIT == signo ) // print a line and exit.
  • {
  • printf(" SIGQUIT is processing ...\n ");
  • printf(" Now exiting ...\n ");
  • exit(EXIT_SUCCESS);
  • }
  • }
  • int main(void)
  • {
  • int i;
  • sigset_t maskset, set_quit;
  • sigemptyset(&maskset);
  • sigemptyset(&set_quit); // initialize two sets.
  • sigaddset(&maskset, SIGINT); // mask SIGINT
  • sigaddset(&set_quit, SIGQUIT); // suspend SIGQUIT
  • // signal the two signals: SIGINT, SIGQUIT
  • signal(SIGINT, sig_func);
  • signal(SIGQUIT, sig_func);
  • while(1)
  • {
  • /* First to mask the signal of the process: SIGINT */
  • sigprocmask(SIG_BLOCK, &maskset, NULL);
  • for(i = 0; i < 10; i ++)
  • {
  • write(1, "* ", strlen("* "));
  • sleep(1);
  • }
  • printf("\n");
  • #if 1
  • /*
  • * while sigsuspend(), SIGQUIT is blocked.
  • * but SIGINT is unblocked.
  • * If you want to execute the two signals, you
  • * should Ctrl-\, then Ctrl-C.
  • * */
  • printf("Before sigsuspend() ... \n");
  • sigsuspend(&set_quit);
  • #else
  • sigprocmask(SIG_UNBLOCK, &maskset, NULL);
  • pause();
  • #endif
  • }
  • return 0;
  • }
  • 程序的運行:在打印“* ?”的時候,SIGINT (Ctrl-C)被 阻塞了。而SIGQUIT沒有被阻塞,只要Ctrl-\就會終止程序。在sigsuspend() 的時候,SIGQUIT (Ctrl-\)被阻塞了,而SIGINT 沒有被阻塞,只要 Ctrl-C 就會進入 signal handler 中執(zhí)行。。如果想在 sigsuspend() 中對兩個信號都進行處理,那么在 sigsuspend() 的時候先 SIGQUIT, 然后 SIGINT。如下是執(zhí)行效果圖:


    來自為知筆記(Wiz)

    轉(zhuǎn)載于:https://www.cnblogs.com/LinTeX9527/p/4031428.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的实验:sigsuspend(),sigprocmask()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。