信号完结

This commit is contained in:
lzy
2024-05-27 02:28:25 +08:00
parent a57bbdb4c1
commit 2336f88407
9 changed files with 703 additions and 8 deletions

View File

@@ -0,0 +1,45 @@
#include <bits/types/sigset_t.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
static void int_hander(int s)
{
write(1, "!", 1);
}
int main(int argc, char** argv)
{
int i;
int j;
sigset_t set;
sigset_t oldset;
sigset_t saveset;
//! 要考虑原来是否阻塞的
signal(SIGINT, int_hander);
sigemptyset(&set);
sigaddset(&set, SIGINT);
sigprocmask(SIG_UNBLOCK, &set, &saveset);
for (j = 0; j < 1000; j++)
{
sigprocmask(SIG_BLOCK, &set, &oldset);
for (i = 0; i < 5; i++)
{
write(1, "*", 1);
sleep(1);
}
write(1, "\n", 1);
// sigprocmask(SIG_UNBLOCK, &set, NULL);
sigprocmask(SIG_SETMASK, &oldset, NULL);
}
// ctrl+\ : quit信号快捷方式
//!!! 还原原来的阻塞状态
sigprocmask(SIG_SETMASK, &saveset, NULL);
exit(0);
}