linux系统编程之信号 test10_10.c
来源:互联网 发布:ubuntu 14.04 pyqt4 编辑:程序博客网 时间:2024/06/08 09:12
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int my_printf(const char *fmt,...);
void sighandler(int signum);
void continuehandler(int signumber);
char buffer[200];
int main(void)
{
struct itimerval itimer;
sigset_t blockset,pending;
int pendingcount;
strcpy(buffer,"None\n");
if(signal(SIGINT,&sighandler)==SIG_ERR)
{
my_printf("Couldn't register signal handler for SIGINT.\n");
}
if(signal(SIGTERM,&sighandler)==SIG_ERR)
{
my_printf("Couldn't register signal handler for SIGTERM.\n");
}
if(signal(SIGCONT,&sighandler)==SIG_ERR)
{
my_printf("Couldn't register signal handler for SIGCONT.\n");
}
sigemptyset(&blockset);
sigaddset(&blockset,SIGINT);
sigaddset(&blockset,SIGTERM);
itimer.it_interval.tv_usec=0;
itimer.it_interval.tv_sec=15;
itimer.it_value.tv_usec=0;
itimer.it_value.tv_sec=15;
for(;;)
{
sigprocmask(SIG_BLOCK,&blockset,NULL);
// alarm(15);
setitimer(ITIMER_REAL,&itimer,NULL);
fgets(buffer,sizeof(buffer),stdin);
my_printf("input:%s",buffer);
sigpending(&pending);
pendingcount=0;
if(sigismember(&pending,SIGINT))
pendingcount++;
if(sigismember(&pending,SIGTERM))
pendingcount++;
if(pendingcount)
{
my_printf("There are %d signals.\n",pendingcount);
}
sigprocmask(SIG_UNBLOCK,&blockset,NULL);
if(strcmp(buffer,"exit\n")==0)
{
raise(SIGKILL);
}
}
return 0;
}
int my_printf(const char *fmt,...)
{
va_list args;
struct tm *tstruct;
time_t tsec;
tsec=time(NULL);
tstruct=localtime(&tsec);
printf("%02d:%02d:%02d %05d\n",tstruct->tm_hour,tstruct->tm_min,tstruct->tm_sec,getpid());
va_start(args,fmt);
return vprintf(fmt,args);
}
void sighandler(int signumber)
{
my_printf("Caught sight %d.\n",signumber);
}
void continuehandler(int signumber)
{
my_printf("Continuint.\n");
my_printf("Your last input was: %s",buffer);
}
/*
void alarmhandler(int signumber)
{
my_printf("No activity for 15 seconds,exiting.\n");
exit(0);
}
*/
#include <stdlib.h>
#include <signal.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int my_printf(const char *fmt,...);
void sighandler(int signum);
void continuehandler(int signumber);
char buffer[200];
int main(void)
{
struct itimerval itimer;
sigset_t blockset,pending;
int pendingcount;
strcpy(buffer,"None\n");
if(signal(SIGINT,&sighandler)==SIG_ERR)
{
my_printf("Couldn't register signal handler for SIGINT.\n");
}
if(signal(SIGTERM,&sighandler)==SIG_ERR)
{
my_printf("Couldn't register signal handler for SIGTERM.\n");
}
if(signal(SIGCONT,&sighandler)==SIG_ERR)
{
my_printf("Couldn't register signal handler for SIGCONT.\n");
}
sigemptyset(&blockset);
sigaddset(&blockset,SIGINT);
sigaddset(&blockset,SIGTERM);
itimer.it_interval.tv_usec=0;
itimer.it_interval.tv_sec=15;
itimer.it_value.tv_usec=0;
itimer.it_value.tv_sec=15;
for(;;)
{
sigprocmask(SIG_BLOCK,&blockset,NULL);
// alarm(15);
setitimer(ITIMER_REAL,&itimer,NULL);
fgets(buffer,sizeof(buffer),stdin);
my_printf("input:%s",buffer);
sigpending(&pending);
pendingcount=0;
if(sigismember(&pending,SIGINT))
pendingcount++;
if(sigismember(&pending,SIGTERM))
pendingcount++;
if(pendingcount)
{
my_printf("There are %d signals.\n",pendingcount);
}
sigprocmask(SIG_UNBLOCK,&blockset,NULL);
if(strcmp(buffer,"exit\n")==0)
{
raise(SIGKILL);
}
}
return 0;
}
int my_printf(const char *fmt,...)
{
va_list args;
struct tm *tstruct;
time_t tsec;
tsec=time(NULL);
tstruct=localtime(&tsec);
printf("%02d:%02d:%02d %05d\n",tstruct->tm_hour,tstruct->tm_min,tstruct->tm_sec,getpid());
va_start(args,fmt);
return vprintf(fmt,args);
}
void sighandler(int signumber)
{
my_printf("Caught sight %d.\n",signumber);
}
void continuehandler(int signumber)
{
my_printf("Continuint.\n");
my_printf("Your last input was: %s",buffer);
}
/*
void alarmhandler(int signumber)
{
my_printf("No activity for 15 seconds,exiting.\n");
exit(0);
}
*/
- linux系统编程之信号 test10_10.c
- linux 系统编程 之信号 test10_1.c
- linux 系统编程之信号 test10_2.c
- linux 系统编程 之信号 test10_3.c
- linux 系统编程之信号 test10_4.c
- linux系统编程之信号 test10_5.c
- linux系统编程之 信号 test10_6.c
- linux系统编程之信号 test10_7.c
- linux系统编程之信号 test10_8.c
- linux系统编程之信号 test10_9.c
- Linux系统编程之----》信号
- Linux系统编程之信号的可重入性
- linux系统编程之信号(一):信号基本概述
- linux系统编程之信号(一):中断与信号
- linux系统编程之信号(一):中断与信号
- Linux系统编程之信号(一):信号基本概述
- linux系统编程之信号(一):中断与信号
- linux系统编程之信号(一):中断与信号
- android menu菜单 onCreateOptionsMenu onMenuItemSelected onContextItemSelected
- linux系统编程之信号 test10_9.c
- 那年,那场青春繁华梦
- POI操作excel示例工具类
- 组织结构转型期的人力资源管理
- linux系统编程之信号 test10_10.c
- [Android]使用ActivityGroup来切换Activity和Layout
- qt设置对话框或控件为固定大小
- Extjs上传附件实战开发,实现批量上传及在线预览功能(三)
- 个人编程心得体会
- Tomcat数据库连接池的配置
- java对象、List转为json格式的数据
- 关于如何做概要设计的思考
- 中国重回世界第一大战略举隅(一)