IPC--信号操作-example
来源:互联网 发布:淄博seo诊断公司 编辑:程序博客网 时间:2024/05/16 09:20
linux下的信号应用,简单的讲只有三件事情:
- 安装信号(推荐使用sigaction());
- 实现三参数信号处理函数,void handler(int signal,struct siginfo *info, void *);
- 发送信号,推荐使用sigqueue()。
demo1:信号发送及处理
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
void new_op(int,siginfo_t*,void*);
int main(int argc,char**argv)
{
struct sigaction act;
int sig;
sig=atoi(argv[1]);
sigemptyset(&act.sa_mask);
act.sa_flags=SA_SIGINFO;
act.sa_sigaction=new_op;
if(sigaction(sig,&act,NULL) < 0)
{
printf("install sigal error\n");
}
while(1)
{
sleep(2);
printf("wait for the signal\n");
}
}
void new_op(int signum,siginfo_t *info,void *myact)
{
printf("receive signal %d", signum);
sleep(5);
}
说明,命令行参数为信号值,后台运行sigreceive signo &,可获得该进程的ID,假设为pid,然后再另一终端上运行kill -s signo pid验证信号的发送接收及处理。同时,可验证信号的排队问题。
实例二:信号传递附加信息
功能:向进程本身发送信号,并传递指针参数;
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
void new_op(int,siginfo_t*,void*);
int main(int argc,char**argv)
{
struct sigaction act;
union sigval mysigval;
int i;
int sig;
pid_t pid;
char data[10];
memset(data,0,sizeof(data));
for(i=0;i < 5;i++)
data[i]='2';
mysigval.sival_ptr=data;
sig=atoi(argv[1]);
pid=getpid();
sigemptyset(&act.sa_mask);
act.sa_sigaction=new_op;//三参数信号处理函数
act.sa_flags=SA_SIGINFO;//信息传递开关
if(sigaction(sig,&act,NULL) < 0)
{
printf("install sigal error\n");
}
while(1)
{
sleep(2);
printf("wait for the signal\n");
sigqueue(pid,sig,mysigval);//向本进程发送信号,并传递附加信息
}
}
void new_op(int signum,siginfo_t *info,void *myact)//三参数信号处理函数的实现
{
int i;
for(i=0;i<10;i++)
{
printf("%c\n ",(*( (char*)((*info).si_ptr)+i)));
}
printf("handle signal %d over;",signum);
}
这个例子中,信号实现了附加信息的传递,信号究竟如何对这些信息进行处理则取决于具体的应用。
- IPC--信号操作-example
- IPC--信号集-example
- IPC——信号
- linux ipc—信号
- IPC-------信号的介绍
- linux IPC之信号
- Linux-IPC之信号
- IPC 管道 信号
- 进程IPC---信号
- IPC--信号(3)--信号的生命周期
- IPC--信号(1)--基本知识
- IPC 信号和共享存储
- Linux IPC 3 之信号
- Linux 进程间通信 (IPC) //信号
- 进程-IPC 信号和信号量 (二)
- linux IPC 通信 study 二:信号signal
- Linux进程通信(三)IPC信号
- 进程间通信IPC——信号
- c++类的一些使用见解
- 排序(未完)
- 使用PLSQL Developer创建表空间
- VS2003启动手持模拟器报错
- 云计算定义
- IPC--信号操作-example
- Linux标准输入,标准输出文件
- 起笔始于熟虑;混乱始于心急
- 网页图片宽度和高度自适应的方法汇总
- 6.1 extract method
- 工作心得:访问不了烟草ip
- 详细讲解Orcale NUMBER类型
- ubuntu下单机安装MongoDB并测试
- 表单中PAGE点击后加载内容,可防止内容多个表单PAGE页同时加载慢