1 信号集
2 信号屏蔽
3 电子时钟
1 信号集
1.1 问题
信号集是指多个信号组成的信号集合。
1.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:sigset_t类型
sigset_t类型是一个结构体类型。
代码如下所示:
#include <sigset.h>
#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
unsigned long int __val[_SIGSET_NWORDS];
} __sigset_t;
该结构体中只有一个成员,是一个包含32个元素的整数数组。
在<signal.h>中又被定义为
typedef __sigset_t sigset_t;
可以把sigset_t类型看成一个由1024个二进制位组成的大整数,其中的每一位对应一个信号,某位为1就表示信号集中有此信号,反之为0就是无此信号。当需要同时操作多个信号时,常以sigset_t作为函数的参数或返回值的类型。
步骤二:sigfillset函数
代码如下所示:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
int main()
{
sigset_t sigset;
if (sigfillset (&sigset) == -1)
{
perror (“sigfillset”);
exit (EXIT_FAILURE);
}
return 0;
}
上述代码中,以下代码:
sigset_t sigset;
定义信号集变量sigset。
上述代码中,以下代码:
if (sigfillset (&sigset) == -1)
{
perror ("sigfillset");
exit (EXIT_FAILURE);
}
使用函数sigfillset填满信号集,即将信号集的全部信号位置1。该函数的参数为要填满的信号集变量。
步骤三:sigemptyset函数
代码如下所示:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
int main()
{
sigset_t sigset;
if (sigfillset (&sigset) == -1)
{
perror (“sigfillset”);
exit (EXIT_FAILURE);
}
if (sigemptyset (&sigset) == -1)
{
perror (“sigemptyset”);
exit (EXIT_FAILURE);
}
return 0;
}
上述代码中,以下代码:
if (sigemptyset (&sigset) == -1)
{
perror (“sigemptyset”);
exit (EXIT_FAILURE);
}
使用函数sigemptyset清空信号集,即将信号集的全部信号位清0,该函数的参数为要清空的信号集变量。
步骤四:sigaddset函数
代码如下所示:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
int main()
{
sigset_t sigset;
if (sigfillset (&sigset) == -1)
{
perror (“sigfillset”);
exit (EXIT_FAILURE);
}
if (sigemptyset (&sigset) == -1)
{