UNIX Day10

本文详细介绍了UNIX系统中的信号集操作,包括如何使用sigset_t类型、sigfillset、sigemptyset、sigaddset、sigdelset、sigismember函数。同时,解释了信号屏蔽的概念,以及如何通过sigprocmask函数设置信号掩码,以及获取未决信号的sigpending函数。最后,通过示例展示了如何使用alarm函数实现电子时钟功能。
摘要由CSDN通过智能技术生成

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)
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值