一、学习的知识点
- 64个信号源 前32个信号 每个信号都有对应的函数指针(回调函数),
- 从信号到函数指针中间还有64个开关(mask)(屏蔽信号),开关默认允许,只有允许信号才能触发函数指针
- 屏蔽信号之前还有pending(未决寄存器)。发送一个信号,对应的pending为1.pending用户只能查看,屏蔽信号才能被用户操作。函数指针被执行后,pending自动清零。被阻塞则为1。
- 信号源-》pending-》屏蔽开关-》函数指针
1屏蔽信号
- sigset_t best;定义一个信号集合
- sigemptyset(&best); 清空信号集,相当于字符指针的清零
- sigaddset(&best,SIGINT); 把要屏蔽的信号放入集合
- sigprocmask(SIG_BLOCK, &best, NULL); 屏蔽2号信号 SIG_BLOCK 设置为阻塞 best 要屏蔽的信号集
- sigprocmask(SIG_UNBLOCK, &pset, NULL); 取消屏蔽信号
- sigfillset(&pset); //所有信号加进去 32 33 没有
- sigdelset(&pset,SIGINT) 删除某个信号
- sigismember(&pset,SIGINT); 查看信号是否在信号集中
2管道
- 缓存(是一段内存),在内核,缓存数据,用于进程间通信
- 管道是unix中最古老的进程间通信的形式
- 把一个进程连接到另一个进程的一个数据流称为 管道
- 是半双工通信。
- 匿名管道只能用于父子进程或兄弟进程间。
2.1匿名管道
int pipefd[2];
if (pipe(pipefd) == -1)
{
perror