User Tools

Site Tools


progsys:index

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
progsys:index [2018/10/26 14:43] – [Ctrl-C] orelprogsys:index [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 995: Line 995:
 int main(void) int main(void)
 { {
-    // struct sigaction act; +    signal(SIGINT, handler); // TODO: utiliser sigaction() plutôt que signal() !
-    signal(SIGINT, handler);+
  
     if (fork() == 0)     if (fork() == 0)
Line 1014: Line 1013:
  
  
 +==== Timeout ====
 +
 +<code C executer-avant-delai.c>
 +
 +#define _GNU_SOURCE
 +#include <unistd.h>
 +#include <signal.h>
 +#include <stdio.h>
 +#include <setjmp.h>
 +
 +static struct sigaction sa, old;
 +static sigjmp_buf env;
 +
 +static void myalarm(int sig)
 +{
 +  printf("alarm!\n");
 +  siglongjmp(env,1);
 +}
 +
 +int executer_avant_delai( void (*fun)(void *), void *parametre, int delai_en_seconde)
 +{
 +  int ret = 1;
 +  sa.sa_handler = myalarm;
 +  sa.sa_flags = 0; // SA_RESETHAND;
 +  sigemptyset(&sa.sa_mask);
 +  sigaction(SIGALRM, &sa, &old);
 +
 +  alarm(delai_en_seconde);
 +  if(sigsetjmp(env,1) == 0)
 +    fun(parametre);
 +  else
 +    ret = 0; // alarm
 +  alarm(0);
 +  sigaction(SIGALRM, &old, NULL);
 +  return ret;
 +}
 +</code>
progsys/index.1540565034.txt.gz · Last modified: 2024/03/18 15:05 (external edit)