История изменений
Исправление beastie, (текущая версия) :
Ты хотя бы в код заглянул, что ли. Я ведь не зря весь код, а не только sniplets, привёл. ;)
В обработчике меняются только флаги:
#include <sys/time.h>
#include <signal.h>
#include <stdio.h>
int gotalrm = 0;
void
catch(int sig)
{
if (sig == SIGALRM)
gotalrm = 1;
}
int
main()
{
struct sigaction sa;
struct itimerval it;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sa.sa_handler = catch;
sigaction(SIGALRM, &sa, NULL);
it.it_value.tv_sec = 1;
it.it_value.tv_usec = 0;
it.it_interval = it.it_value;
setitimer(ITIMER_REAL, &it, NULL);
for (;;) {
if (gotalrm) {
puts("dong");
gotalrm = 0;
}
sigsuspend(&sa.sa_mask);
}
return 0;
}
PS: поправил для полноты картины.
Исправление beastie, :
Ты хотя бы в код заглянул, что ли. Я ведь не зря весь код, а не только sniplets, привёл. ;)
В обработчике меняются только флаги. В данном конкретном случае, даже и этого не надо. Достаточно будет:
#include <sys/time.h>
#include <signal.h>
#include <stdio.h>
int gotalrm = 0;
void
catch(int sig)
{
if (sig == SIGALRM)
gotalrm = 1;
}
int
main()
{
struct sigaction sa;
struct itimerval it;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sa.sa_handler = catch;
sigaction(SIGALRM, &sa, NULL);
it.it_value.tv_sec = 1;
it.it_value.tv_usec = 0;
it.it_interval = it.it_value;
setitimer(ITIMER_REAL, &it, NULL);
for (;;) {
if (gotalrm) {
puts("dong");
gotalrm = 0;
}
sigsuspend(&sa.sa_mask);
}
return 0;
}
Исходная версия beastie, :
Ты хотя бы в код заглянул, что ли. Я ведь не зря весь код, а не только sniplets, привёл. ;)
В обработчике меняются только флаги. В данном конкретном случае, даже и этого не надо. Достаточно будет:
#include <sys/time.h>
#include <signal.h>
#include <stdio.h>
void
catch(int sig)
{
/* do nothing */
}
int
main()
{
struct sigaction sa;
struct itimerval it;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sa.sa_handler = catch;
sigaction(SIGALRM, &sa, NULL);
it.it_value.tv_sec = 1;
it.it_value.tv_usec = 0;
it.it_interval = it.it_value;
setitimer(ITIMER_REAL, &it, NULL);
for (;;) {
puts("dong");
sigsuspend(&sa.sa_mask);
}
return 0;
}