ccplusplus.com
Learn C, C++ Concepts
Thursday, October 27, 2011
sleep function example in c
/**************************************************************** * Filename : sleep.c * Author : Saurabh Gupta * Source : http://saurabhgupta0527.blogspot.com/2011/08/posix-signal-tutorial.html * Desc : Implementation of POSIX sleep * sleep function in unix * sleep function example * Created : AM 10:24 27 October 2011 * Note : ****************************************************************/ #include
#include
#include
#include
static void sig_alrm(int signo) { /* * nothing to do, just returning wakes up sigsuspend() */ } unsigned int sleep(unsigned int nsecs) { struct sigaction newact, oldact; sigset_t newmask, oldmask, suspmask; unsigned int unslept; /* * set our handler, save previous information */ newact.sa_handler = sig_alrm; sigemptyset(&newact.sa_mask); newact.sa_flags = 0; sigaction(SIGALRM, &newact, &oldact); /* * block SIGALRM and save current signal mask */ sigemptyset(&newmask); sigaddset(&newmask, SIGALRM); sigprocmask(SIG_BLOCK, &newmask, &oldmask); alarm(nsecs); suspmask = oldmask; sigdelset(&suspmask, SIGALRM); // make sure SIGALRM isn't blocked sigsuspend(&suspmask); // wait for any signal to be caught /* * some signal has been caught, SIGALRM is now blocked */ unslept = alarm(0); sigaction(SIGALRM, &oldact, NULL); // reset previous action /* * reset signal mask, which unblocks SIGALRM */ sigprocmask(SIG_SETMASK, &oldmask, NULL); return(unslept); }
No comments:
Post a Comment
Newer Post
Older Post
Home
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment