Linux下alarm,sigaction,pause

原创 2016年08月29日 11:33:33
/*
  #include <unistd.h>
  unsigned int alarm(unsigned int seconds);

  RETURN VALUE
       alarm() returns the number of seconds remaining  until  any  previously
       scheduled alarm was due to be delivered, or zero if there was no previ‐
       ously scheduled alarm.

*/


/*
#include<stdio.h>
#include <unistd.h>

unsigned int ret=0;
unsigned seconds=10;
int main(void)
{
	while(1)
	{
	 ret=alarm(seconds);
     sleep(5);	 
	 printf("ret=%d.\n",ret);	
	}

	return 0;
}

//结果值是0,5,5,5循环5
*/

//******************************************************
/*
#include<stdio.h>
#include <unistd.h>
#include <signal.h>

void func(int sig)
{
	if(sig==SIGALRM)
	{
		printf("alarm happened.\n");
	}
}

unsigned ret=-1;
struct sigaction act={0};

int main(void)
{
	
     act.sa_handler=func;
	 sigaction(SIGALRM,&act,NULL);
                     

	 ret=alarm(8);
	 sleep(1);
	 printf("1st,ret=%d.\n",ret);
	 
	 ret=alarm(5);
	 sleep(2);
	 printf("2st,ret=%d.\n",ret);
	 
	 ret=alarm(6);
	 sleep(3);
	 printf("3st,ret=%d.\n",ret);
	 
	 
	 pause();
	
	 return 0;
	
}

//结果为:1st,ret=0.
//        2st,ret=7.
//        3st,ret=3.
//        alarm happened
*/
//***************************************************************
/*
//sigaction+alarm模拟sleep
#include<stdio.h>
#include <signal.h>
#include <unistd.h>

void func(void)
{
	
}

void mysleep(unsigned int seconds)
{

	struct sigaction act={0};
	
	act.sa_handler= func;
	sigaction(SIGALRM,&act,NULL);
    
	alarm(seconds);
	pause();
}

int main(void)
{
	
	printf("before mysleep.\n");
	mysleep(5);
	printf("after mysleep.\n");
	
	return 0;
}

*/

1.pause函数的作用是让当前进程暂停运行,交出CPU给其他进程去执行。当前进程进入pause状态后,当前进程会表现为卡住,阻塞住,要退出pause状态,当前进程需要被信号唤醒。

2.sigaction

  #include <signal.h>
  int sigaction(int signum, const struct sigaction *act,
                     struct sigaction *oldact);

 The sigaction structure is defined as something like:
  struct sigaction {
               void     (*sa_handler)(int);
               void     (*sa_sigaction)(int, siginfo_t *, void *);
               sigset_t   sa_mask;
               int        sa_flags;
               void     (*sa_restorer)(void);
                             };






版权声明:本文为博主原创文章,未经博主允许不得转载。

VxWorks 任务

任务:在执行时每个程序都被称之为任务。VxWorks操作系统中,任务可以直接地或者以共享方式访问大多数系统资源,为了维护各自的线程,每个任务必须保持有足够的上下文环境。(1)    任务状态:就绪(R...
  • mao0514
  • mao0514
  • 2013年07月22日 16:28
  • 1859

VxWorks信号、中断处理与定时机制

为了获得尽可能的、最快的中断反应时间,VxWorks的中断处理程序(ISRs)运行在它们特定的上下文中(独立于任何任务的上下文)。 信号 支持软件信号功能。 信号可以异步改变任务控制流。获得信号的任务...
  • abcflyer
  • abcflyer
  • 2016年11月15日 10:59
  • 1244

c的信号处理sigaction

##c语言中的信号处理 我们在shell环境下进行功能调试的时候,当进程在前台运行时,我们经常使用ctrl+c来退出当前任务的执行;当进程在后台运行时,我们只能通过ps查到进程的pid,然后通过ki...
  • wdsping2008
  • wdsping2008
  • 2016年06月13日 19:55
  • 81

详解sigaction

一、内核如何实现信号的捕捉 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 1. 用户程序注...
  • jiuxiaotian
  • jiuxiaotian
  • 2014年03月12日 10:50
  • 852

Linux下alarm,sigaction,pause

/* #include unsigned int alarm(unsigned int seconds); RETURN VALUE alarm() returns th...
  • qq_24373811
  • qq_24373811
  • 2016年08月29日 11:33
  • 357

C语言接口与实现[+]

第1章 简介 1. literate程序 2. 宏指令与条件编译指令 第2章 接口与实现 1. 接口与实现的关系 2. Arith接口及实现: arith.h:...
  • benpaobagzb
  • benpaobagzb
  • 2015年09月14日 17:16
  • 980

alarm pause 的用法

alarm()和pause()函数的应用 alarm unsigned int alarm(unsigned int seconds); alarm函数是设置一个计时器, 在计时器超时的时候, ...
  • sgling0440
  • sgling0440
  • 2011年08月07日 16:19
  • 1546

Linux环境编程之信号处理(三、利用alarm()和pause()函数实现sleep()函数)

sleep()是执行挂起一段时间,而alarm()函数是定时器,pause()函数则是挂起进程,当出现信号打断时,才会继续往前执行;         先来分享下alarm()函数,alarm()函数用...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015年04月03日 14:51
  • 1935

unp-----signal函数与系统中断

一.signal分析 系统中断
  • xiaomiCJH
  • xiaomiCJH
  • 2017年06月11日 19:43
  • 169

操作系统 — 捕捉信号

捕捉信号从上篇浅析信号中我们了解到信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作为软中断. 从它的命名可以看出来它的实质和使用和中断非常相似,所以,信号也可以说是进程控制的...
  • Dawn_sf
  • Dawn_sf
  • 2018年01月19日 12:50
  • 311
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下alarm,sigaction,pause
举报原因:
原因补充:

(最多只允许输入30个字)