信号传参

1)发送信号传参

前面已经知道从一个进程向另一个进程发送信号可以使用kill函数,但是kill函数在向进程发送信号的时候不能携带除了信号以外的其他信息,这时可以使用与kill相对应的sigqueue函数,该函数也是向一个进程发送信号,但是可以携带其它参数信息:

int sigqueue(pid_t pid, int sig, const union sigval value); 成功:0;失败:-1,设置errno

union sigval {           //向进程发送一个联合体变量value

int   sival_int; 

    void *sival_ptr;

};

即sigqueue函数在向进程发送信号的同时,还可向进程发送一个变量value,包含两个成员:一个是整型数据sival_int;另一个是泛型指针sival_ptr(通过该指针可以携带任何数据)。但是要注意一点:整型数据是按值传递,因此没有问题;而发送的指针是该进程自己进程空间的虚拟地址,不同进程之间虚拟地址空间各自独立,将当前进程地址传递给另一进程没有实际意义。即进程给自己发送信号,传送指针才会有意义

2)捕捉函数传参

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

           struct sigaction {

               void     (*sa_handler)(int);

               void     (*sa_sigaction)(int, siginfo_t *, void *);

               sigset_t   sa_mask;

               int       sa_flags;

               void     (*sa_restorer)(void);

           };

当注册信号捕捉函数,希望获取更多信号相关信息,不应使用sa_handler而应该使用sa_sigaction。但此时的sa_flags必须指定为SA_SIGINFO。siginfo_t是一个成员十分丰富的结构体类型,可以携带各种与信号相关的数据。sa_flags为0,则捕捉函数使用sa_handler,且为默认属性(在调用户处理函数期间屏蔽信号本身);sa_flags为SA_SIGINFO,则捕捉函数使用sa_sigaction,该函数可以携带更多的参数:第一个参数同sa_handler函数,默认为信号编号,但自己也可以赋值;第二个参数为传出参数,是一个结构体类型,其中包含了信号相关的数据;第三个参数为传入参数,可以传入一个泛型指针。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode | 52】257. 二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3 解法一&a…

623. 在二叉树中增加一行

给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树…

终端的概念

操作系统接口:用户接口和程序接口。用户接口分为联机用户接口和脱机用户接口。脱机用户接口出现在早期的批处理系统中(将作业提前交给操作系统,作业完成的过程中用户无法交互);联机用户接口即为终端(所有输…

终端的启动流程

在Linux操作系统启动时,首先加载的进程就是init进程(ID为1),其余进程都是init进程产生的(fork,然后exec金蝉脱壳),因此系统中所有进程都可以看成是init进程的子孙进程。可以通过ps a…

进程组(作业)

(1)概念和特性 进程组,也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多…

437. 路径总和 III

给定一个二叉树,它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 二叉树不超过1000个节…

会话(session)

一组进程形成一个进程组,一组进程组形成一个会话,即一个会话中可以包括多个进程组。 (1)创建会话 创建一个会话需要注意以下6点注意事项:1.调用进程不能是进程组组长(不能是父进程)&#xff0…

508. 出现次数最多的子树元素和

给出二叉树的根,找出出现次数最多的子树元素和。一个结点的子树元素和定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。然后求出出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的…

1003 我要通过!(20)(20 分)

“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是: 1. 字符串中必须仅有P, A, T这三种字符…

网络终端

虚拟终端或串口终端的数目是有限的,虚拟终端(字符控制终端)一般就是/dev/tty1∼/dev/tty6六个,串口终端的数目也不超过串口的数目。然而网络终端或图形终端窗口的数目却是不受限制的,这是通过伪终端(Pseudo…

线程的概念

线程(LWP,light weight process)是轻量级的进程,本质仍是进程(在类unix环境下)。进程有独立地址空间,拥有PCB;线程也有PCB,但没有独立的地址空间(共享&#x…

1001. 害死人不偿命的(3n+1)猜想 (15)

卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n1。卡拉兹在1950年的世界数学家大会上公布了这个猜…

海量数据处理 (一)

现有海量日志数据保存在一个超级大的文件中,该文件无法直接读入内存,要求从中提取某天出访问百度次数最多的那个IP。 从这一天的日志数据中把访问百度的IP取出来,逐个写入到一个大文件中;注意到IP是32位的,最多有2^32个IP。同样可…

线程控制原语之pthread_self和pthread_create函数

注意:使用线程库函数用gcc编译时,要加参数:-lpthread(libpthread.so),因为线程库函数属于第三方c库函数,不是标准库函数(/lib、/usr/lib或者/usr/local/lib)。 &#xf…

1005. 继续(3n+1)猜想 (25)

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n3进行验证的时候,我们需要计算3、5、8、4、2、1&#…

C指针深度解析

(1)指针的概念 指针是一种数据类型,而内存地址是这种数据类型具体的值(注意区分两者的概念)。先说一下什么是内存地址:假设CPU的寻址方式是以字节寻址的,即每一个字节对应一个地址编号&#xf…

1007. 素数对猜想

让我们定义 dn 为&#xff1a;dn pn1 - pn&#xff0c;其中 pi 是第i个素数。显然有 d11 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N (< 105)&#xff0c;请计算不超过N的满足猜想的素数对的个数。 输入格式&…

线程共享全局变量(.data和.bbs)

线程默认共享数据段、代码段等地址空间&#xff0c;常用的是全局变量。而进程不共享全局变量&#xff0c;只能借助mmap。 //代码示例 #include <string.h> #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <string.h> …

1008 数组元素循环右移问题 (20)

一个数组A中存有N&#xff08;N&gt0&#xff09;个整数&#xff0c;在不允许使用另外数组的前提下&#xff0c;将每个整数循环向右移M&#xff08;M>0&#xff09;个位置&#xff0c;即将A中的数据由&#xff08;A~0~ A~1~……A~N-1~&#xff09;变换为&#xff08;A~N-…

C++设计模式之策略模式(Strategy)

Strategy策略模式作用&#xff1a;定义了算法家族&#xff0c;分别封装起来&#xff0c;让他们之间可以互相替换&#xff0c;此模式让算法的变化&#xff0c;不会影响到使用算法的客户。 UML图&#xff1a; 代码实现 #include <iostream> using namespace std;class St…