Basic signal and alarm usage


 
Thread Tools Search this Thread
Top Forums Programming Basic signal and alarm usage
# 1  
Old 05-28-2007
Basic signal and alarm usage

I am trying to write a program that will;
1) Show the message "Snoozing now...zzzz" on the screen for 5 seconds
2) Then in the same position show the message "The ALARM is going off now!" for 5 seconds
3) Repeat 1) then 2) infinitely until user presses Ctrl C

I can't make it work. Any hints appreciated.
Here is my code;

[me@myplace]$
cat main10.c
/* main10.c
testing signals and alarms */

#include <curses.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>

void handler( void )
{
clear();
mvprintw(10, 10, "The ALARM is going off now!\n" );
refresh();
signal( SIGALRM, handler );
alarm( SIGALRM, 5 );
}

int main( void )
{
clear();
signal( SIGALRM, handler );
alarm( SIGALRM, 5 );
mvprintw( 10, 10, "Snoozing now..zzzzzz\n");
refresh();
endwin();
}
[me@myplace]$ gcc main10.c -lcurses -o mainApp10
main10.c: In function `handler':
main10.c:17: warning: passing arg 2 of `signal' from incompatible pointer type
main10.c: In function `main':
main10.c:24: warning: passing arg 2 of `signal' from incompatible pointer type
[me@myplace]$ mainApp10
Segmentation fault
[me@myplace]$
# 2  
Old 05-28-2007
Where is the curses mode initialized,

Code:
initscr();

# 3  
Old 05-28-2007
Modified your code,

alarm prototype is not correct!

Check this,

Code:
#include <curses.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>

void handler(void);

void handler( void )
{
clear();
mvprintw(10, 10, "The ALARM is going off now!\n" );
refresh();
signal( SIGALRM, handler );
alarm( 5 );
}

int main( void )
{
initscr();
clear();
signal( SIGALRM, handler );
alarm( 5 );
mvprintw( 10, 10, "Snoozing now..zzzzzz\n");
getch();
refresh();
endwin();
return 0;
}

# 4  
Old 05-28-2007
Thanks a lot. matrixmadhan your code almost works perfectly. The only thing it doesn't do is loop infinitely between "The ALARM...." and "Snoozing.....".

It starts by displaying "Snoozing....." than after 5 seconds "The ALARM....". This is good. But then "The ALARM...." stays on screen forever. I want it to then revert back to "Snoozing....." and then back to "The ALARM...." etc etc etc in an infinite loop every 5 seconds.

I will try to modify. Any more hints appreciated.

Last edited by enuenu; 05-28-2007 at 09:41 AM..
# 5  
Old 05-28-2007
Although that may be a jolly program, that is far too much code for a signal handler.

C libraries are not "signal safe", the most you should be doing in a signal handler is setting a flag or a minimal bit of IPC to awaken the main program.

If your handler was called in the middle of malloc your heap could get trashed.
# 6  
Old 05-28-2007
One way:
Code:
#include <curses.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>

void handler(int sig) { }

int main( void )
{
        int state;
        signal(SIGALRM, handler);
        initscr();
        clear();
        state=0;
        while(1) {
                if(state) {
                        mvprintw(10, 10, "The ALARM is going off now!\n" );
                } else {
                        mvprintw( 10, 10, "Snoozing now..zzzzzz\n");
                }
                refresh();
                alarm(5);
                pause();
                state=!state;
        }
}

# 7  
Old 05-28-2007
Thanks very much to all. I have a project in mind and this forms a piece of it. I will forge ahead now. You have helped me understand how to implement alarms and signals.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Basic sed usage in shell script

Hi, A basic sed question. I have a set of files. In each file there is a number that I want replaced. For example, if I run sed I should get the following: % cat test2.txt #goofy//171.00 goofy 171.00 % sed -i 's/171/xxx/g' test2.txt % cat test2.txt #goofy//xxx.00 goofy xxx.00 ... (2 Replies)
Discussion started by: pc2001
2 Replies

2. Shell Programming and Scripting

basic computer usage report

Our small company, about 5 users, need a basic script that scans mapped network drives (example: drive b,c,d, e, and f) for hard drive usage. This needs to send a report to myself in any type of basic notepad format (easy to read and decipher) for drives that have reached 80% usage... any ideas? ... (1 Reply)
Discussion started by: jessessays
1 Replies

3. Programming

alarm signal processing

I'm writing a function right now, and I want to set an alarm to avoid a timeout, here's the general idea of my code: int amt = -2; alarm(10); amt = read(fd, &t->buf, TASKBUFSIZ - tailpos); //do a read when the alarm goes off, i want to check the value of "amt" ... (1 Reply)
Discussion started by: liaobert
1 Replies

4. Solaris

False Memory usage alarm!!

Hi Experts, I am using Solaris-10, Sun-Fire-V445. i got often the below message- "Memory Usage – Critical, Memory usage (RAM) exceeding 90% The memory utilization is exceeding 90%" in a application running on solaris. I checked with Vmstat. Everything seems to be fine. Where i should... (5 Replies)
Discussion started by: thepurple
5 Replies

5. HP-UX

how can I find cpu usage memory usage swap usage and logical volume usage

how can I find cpu usage memory usage swap usage and I want to know CPU usage above X% and contiue Y times and memory usage above X % and contiue Y times my final destination is monitor process logical volume usage above X % and number of Logical voluage above can I not to... (3 Replies)
Discussion started by: alert0919
3 Replies

6. Programming

Usage of exit() inside a signal handler

Is it ok to use exit() inside a signal handler? I catch SIGUSR1 in a signal handler and I try to close a file and then exit. The result is inconsistent. Sometimes the process exit and sometimes it returns to the original state before the signal handler was invoked. Perhaps exit is not legal in... (8 Replies)
Discussion started by: Tuvia
8 Replies

7. Shell Programming and Scripting

Basic bash 'for loop' usage

Hi! I have a simple question about using a for loop. I'm trying to open up all the zip files in the currect directory with ark, but I am getting the error "bash: syntax error near unexpected token `for $i ; do ark $i ; done ; I looked in the info pages for bash, but I can't seem to figure... (2 Replies)
Discussion started by: Orange Stripes
2 Replies

8. AIX

basic question about disk usage

how to i find out the disk usage on a server. say in windows examples its like C:/ D:/ and checking out the disk space. how can i find in Unix. can i just use df -k (3 Replies)
Discussion started by: karthikosu
3 Replies

9. Shell Programming and Scripting

Perl alarm signal

I am trying to write a signal to exit when a process times out. What I have come up with from poking around the web is this. #!/usr/bin/perl eval { local $SIG{ALRM} = sub { die "alarm clock restart" }; alarm 10; open(DSMADMC, "dsmadmc -se=tsmpc1 -id=XXXXX... (2 Replies)
Discussion started by: reggiej
2 Replies

10. UNIX for Dummies Questions & Answers

Alarm signal

Hi, when I execute a script on unix AIX, I've got an error message: "Execution: 85328 Signal d'alarme". If I edit this file with "vi", I ve got the same error after a while (about 1 minute). If I try with another user I still have the problem. But if I rename this file, no problem. My... (5 Replies)
Discussion started by: cgsteph
5 Replies
Login or Register to Ask a Question