Forum Programmation.c Alarme (boucle)

Posté par  .
Étiquettes : aucune
-1
12
oct.
2008
Salut à tous !!

Je cherche à lancer une alarme toutes les 5 secondes.
J'ai bien essayé un #include
[...]
ualarm(0, 5000000);
(http://man.developpez.com/man3/ualarm.3.php)
mais GCC me retourne un :
attention : implicit declaration of function ‘ualarm’

Est-ce bien la bonne fonction que je dois-utiliser ?
Ou cela vient-il d'une erreur de ma part ?


Merci !
  • # Erreur

    Posté par  . Évalué à 1.

    Copie foirreuse !!

    C'est #include <unistd.h></code
  • # Fonction obsolète

    Posté par  . Évalué à 2.

    POSIX.1-2001 marque ualarm() comme obsolète.

    Si tu souhaites avoir un signal toutes les 5 secondes, alarm() convient bien.
    • [^] # Re: Fonction obsolète

      Posté par  . Évalué à 2.

      Je rajouterai que c'est d'ailleurs mis aussi dans la section Notes de la page de man:

      Cette fonction est obsolète, utilisez nanosleep(2) ou setitimer(2) à sa place.

      ...il faut toujours jeter un oeil à la section notes...

      Sinon, je rajouterai aussi que dans le Synopsys, il est aussi précisé ceci:
      #define _XOPEN_SOURCE 500

      c'est probablement ce qui manque si tu veux *vraiment* utiliser cette fonction.
      • [^] # Re: Fonction obsolète

        Posté par  . Évalué à 1.

        Je l'avais bien vu, mais un alarm(5), ne me l'envoi qu'une seule fois.
        Mois je veux faire une boucle infinie et je n'y arrive pas.
  • # Réponse ??

    Posté par  . Évalué à -1.

    J'ai peut-etre trouvé une réponse, mais bon je pense qu'il doit exister une version plus propre :

    while(x)
    {
    alarm(5);
    pause();
    }


    Le problème c'est que ca marche à peu près comme je veux, mais il a tendance a m'oublier certaines instructions...., lol
    • [^] # Re: Réponse ??

      Posté par  . Évalué à 4.

      Ahem... comment dire... Tu débutes en tant que programmeur j'espère ?
      Nan parceque sinon c'est grave :-)
  • # Re: Alarme (boucle)

    Posté par  . Évalué à 3.

    Je cherche à lancer une alarme toutes les 5 secondes.

    #include <signal.h>
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>     // EXIT_*
    #include <unistd.h>     // pause()

    #define ALRM_DATA 42

    typedef struct sigevent         sigevent_t;
    typedef struct itimerspec       itimerspec_t;

    void sig_hdler(union sigval value)
    {
      if (value.sival_int == ALRM_DATA)
      {
        puts("Alarm received");
      }
    }

    int main()
    {
      int                   res;
      timer_t               timerid;
      sigevent_t            evp;
      const itimerspec_t    timer_value =
      {
        { 5, 0 },
        { 5, 0 }
      };

      evp.sigev_notify              = SIGEV_THREAD;
      evp.sigev_signo               = SIGALRM;
      evp.sigev_value.sival_int     = ALRM_DATA;
      evp.sigev_notify_function     = sig_hdler;
      evp.sigev_notify_attributes   = NULL;

      res = timer_create(CLOCK_REALTIME, &evp, &timerid);
      if (res)
      {
        perror("timer_create() failed");
        return EXIT_FAILURE;
      }

      timer_settime(timerid, TIMER_ABSTIME, &timer_value, NULL);

      pause();

      return EXIT_SUCCESS;
    }



    À compiler avec -lrt.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.