mirror of
https://github.com/troglobit/libuev.git
synced 2026-10-02 05:42:36 +07:00
75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
/* Example of how to handle signal, in this case Ctrl-C
|
|
*
|
|
* A common problem for users of libuEV is how to combine it with the
|
|
* traditional aspects of UNIX. Since libuEV is just a wrapper for
|
|
* signalfd() and epoll(), in this case, it can be worth a dedicated
|
|
* example. After all, command line use with Ctrl-C is one of the most
|
|
* common use-cases.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <signal.h>
|
|
#include "src/uev.h"
|
|
|
|
void timeout(uev_t *w, void *arg, int events)
|
|
{
|
|
(void)arg;
|
|
|
|
if (UEV_ERROR == events)
|
|
puts("Ignoring timer watcher error ...");
|
|
|
|
puts("Zero Wing was the pinnacle of gaming https://en.wikipedia.org/wiki/Zero_Wing");
|
|
}
|
|
|
|
void teaser(uev_t *w, void *arg, int events)
|
|
{
|
|
(void)arg;
|
|
|
|
if (UEV_ERROR == events)
|
|
puts("Ignoring SIGINT watcher error ...");
|
|
|
|
puts("\nCaught SIGINT ...");
|
|
puts("Sorry, you actually need to press Ctrl-\\ to exit.");
|
|
}
|
|
|
|
void cleanup(uev_t *w, void *arg, int events)
|
|
{
|
|
(void)arg;
|
|
|
|
if (UEV_ERROR == events)
|
|
puts("Ignoring signal watcher error ...");
|
|
|
|
/* Graceful exit, with optional cleanup ... */
|
|
puts("\nCaught SIGQUIT, exiting.");
|
|
|
|
uev_exit(w->ctx);
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
uev_ctx_t ctx;
|
|
uev_t timerw;
|
|
uev_t sig1w;
|
|
uev_t sig2w;
|
|
|
|
uev_init(&ctx);
|
|
|
|
/* example worker, a timer callback */
|
|
uev_timer_init(&ctx, &timerw, timeout, NULL, 100, 2000);
|
|
|
|
/* the owls are not what they seem ... */
|
|
uev_signal_init(&ctx, &sig1w, teaser, NULL, SIGINT);
|
|
uev_signal_init(&ctx, &sig2w, cleanup, NULL, SIGQUIT);
|
|
|
|
puts("Starting, press Ctrl-C to exit.");
|
|
|
|
return uev_run(&ctx, 0);
|
|
}
|
|
|
|
/**
|
|
* Local Variables:
|
|
* compile-command: "make ctrl; ./ctrl"
|
|
* c-file-style: "linux"
|
|
* End:
|
|
*/
|