User Tools

Site Tools


user:bkenne11:portfolio:timers

Project: Timers n' signals

A project for Systems Programming by Brandon Kennedy during the fall 2011 semester.

This project was begun on 12-15-2011 and is anticipated to take 4 hours.

Objectives

By undertaking this project I hope to refresh myself on the use of timers and signal handling. I am going to review a previous program and reformat it to be an alarm clock(soundless).

Prerequisites

In order to successfully accomplish/perform this project, the listed resources/experiences need to be consulted/achieved:

  • wikipedia and the c programming guide on timers and signals
  • c pocket reference
  • matt Hass (back in september

Background

The idea of this project is to use timers and signals to create a nagging alarm clock. I am hoping that by reviewing and re-implementing this program that I can brush up on timers and signal handling enough to be able to implement this concept in other programs.

Attributes

State and justify the attributes you'd like to receive upon successful approval and completion of this project.

  • attribute1: Signals → this program handles signals
  • attribute2: timers → this program implements a timer as an alarm clock

Code

Upon completion of the project, if there is an applicable collection of created code, place a copy of your finished code within <code> </code> blocks here.

//signal.c
//An alarm function by brandon kennedy for systems programming
//This function implements timers and signals as an alarm clock
//
//written in september of 2011
//Now being reused as a project for systems programming on 12-15-2011
//this file was created on 12-15-2011
 
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
 
#define INTERVAL 5
 
int howmany = 0;
 
void alarm_wakeup (int i)
{
   struct itimerval tout_val;
 
   signal(SIGALRM,alarm_wakeup);
 
   howmany += INTERVAL;
 
   printf("\n%d sec up, time to Wakeup!!!\n",howmany);
   tout_val.it_interval.tv_sec = 0;
   tout_val.it_interval.tv_usec = 0;
   tout_val.it_value.tv_sec = INTERVAL; /* 10 seconds timer */
   tout_val.it_value.tv_usec = 0;
 
   setitimer(ITIMER_REAL, &tout_val,0);
 
}
void exit_func (int i)
{
    signal(SIGINT,exit_func);
    printf("\nYour up! Bye!!!\n");
    exit(0);
}
 
int main ()
{
  struct itimerval tout_val;
 
  tout_val.it_interval.tv_sec = 0;
  tout_val.it_interval.tv_usec = 0;
  tout_val.it_value.tv_sec = INTERVAL; /* 10 seconds timer */
  tout_val.it_value.tv_usec = 0;
  setitimer(ITIMER_REAL, &tout_val,0);
 
  signal(SIGALRM,alarm_wakeup); /* set the Alarm signal capture */
  signal(SIGINT,exit_func);
 
  while(1)
  {
     //printf("!");
  }
  return 0;
}

Execution

Again, if there is associated code with the project, and you haven't already indicated how to run it, provide a sample run of your code:

lab46:~/src/SysProg/signals$ ./signal

5 sec up, time to Wakeup!!!

10 sec up, time to Wakeup!!!

15 sec up, time to Wakeup!!!

20 sec up, time to Wakeup!!!

25 sec up, time to Wakeup!!!
^C
Your up! Bye!!!
lab46:~/src/SysProg/signals$

Reflection

Timers rock! I can deffinitely see a future for timers in my programming. As for signals, I could play some pretty sweet tricks on people with those bad boys, talk about a runaway program :)

References

In performing this project, the following resources were referenced:

  • wiki page of timers and signal
  • the c programming guide of timers
  • matt haas
  • manual pages for signal and setitimer
user/bkenne11/portfolio/timers.txt · Last modified: 2011/12/15 12:21 by bkenne11