#include <stdio.h> #include <stdlib.h> int main(int argc, char ** argv) { for(int i = 1; i < 1000; i++) { size_t *p = (size_t *) malloc(i * sizeof(size_t)); printf("%zu = %d * %zu\n", *(p - 1), i * sizeof(size_t)); } return 0; }
#include <stdio.h> #include <stdlib.h> int main(int argc, char ** argv) { for(int i = 1; i < 1000; i++) { size_t *p = (size_t *) malloc(i * sizeof(size_t)); printf("%zu = %d * %zu\n", *(p - 1), i * sizeof(size_t)); } return 0; }
This is a simple way to make a code be executed from time to time, using alarm().
#include #include #include static void run(int signal) { printf("signal = %i\n", signal); alarm(1); } int main(int argc, char **argv) { struct sigaction act; act.sa_handler = run; if(sigaction(SIGALRM, &act, NULL)) { fprintf(stderr, "Error adding handler for SIGALRM.\n"); return 1; } alarm(1); while(1); return 0; }
They don’t really create the directory. They just turn on and off listening to them.
When a signal is emitted a lot of times, and the processing of the action associated with the signal is expensive, it’s an option to only run the action when the system is idle. Using this function in this manner, this result can be achieved. I got to know this talking to pierlux in #champlain@irc.freenode.net and taking a look at champlain-marker.c from libchamplain. Thanks.
static gboolean scheduled; static gboolean run(gpointer user_data) { /* expensive code */ scheduled = FALSE; return FALSE; } static void on_event(GObject * object, gpointer user_data) { if(!scheduled) { scheduled = TRUE; g_idle_add(run, (gpointer) parameter_name); } } int main(int argc, char **argv) { /* initialization */ g_signal_connect(object, "event", G_CALLBACK(on_event), NULL); /* enter main loop */ }