Problème de signaux - C - Programmation
Marsh Posté le 18-08-2014 à 01:57:38
Bonjour,
J'avais déjà vu ça, mais zappé pour une mauvaise raison. C'est ici que ça quitte, sur le premier exit(). Et silencieusement à cause du EXIT_SUCCESS.
Code :
|
Pourquoi l'utilisation de setitimer() causerait cette erreur ? Parce qu'il génère un signal, pour le moins ! Il m'aura suffit de lire cette page.
C'est pas fini. Et je dois sérieusement retoucher mon code. Mais au moins, tout espoir n'est pas perdu!
Paulo
Marsh Posté le 18-08-2014 à 20:59:19
un signal reçu par un processus interrompt un appel système dans ce même processus. Ton select ( qui est bloquant ) retourne donc -1 , mais errno vaut EINTR. Il faut donc gérer ce cas.
Marsh Posté le 17-08-2014 à 01:15:35
Bonjour tous,
J’écris un logiciel qui émule une machine qui a existé il y a maintenant plus de 25 ans. Il s’agit d’un ordinateur à base de MC6801/3 (un ancien processeur / microcontroleur 8 bits de Motorola) qui opérait l’OS Flex2.
Un bout de code de duplique fork() puis chaque branche ouvre un terminal (xterm, urxvt ou autre konsole), l’un exécutant l’émulateur avec son moniteur-débugger et l’autre simulant simplement une VT52. J’usqu’à maintenant, pas de problème, et le projet est bien avancé, bien qu'il reste beaucoup à faire. Il existe une commande du débogeur/moniteur qui permet de générer une interruption du processeur émulé (NMI ou IRQ), et cette partie fonctionne bien.
J’ai voulu être interrompu régulièrement (comme le matériel d’antan) et ai utilisé setitimer() pour ça. Mode ITIMER_REAL → SIGALRM. Tout fonctionne bien (!) si ce n’est que le programme d’émulation s’arrête. J’ai beau chercher à savoir pourquoi, rien n’y fait : je ne trouve pas. Je ne sais pas où me mettre (avec le débogeur DDD) pour voir d’où vient le problème. J’imagine qu’un autre signal (d’erreur, probablement) est généré et que le handler par défaut de ce signal provoque l’abandon, mais je n’imagine pas de solution pour intercepter afin de débugger.
Notez qu'à un moment, j'ai essayé de faire envoyer des signaux SIGUSR1 à la partie debugger-moniteur, par la partie VT52, qui n'a guère que ça à faire, et j'ai eu le même problème. Il s'agit certainement de quelque chose de bien connu par ceux qui ont chatouillé les signaux, mais suis trop tarte, sans doute : Je ne sais pas d'où ça vient et ne sais pas comment faire pour le trouver, et donc y remédier !
extraits:
L’"allumage" du timer:
Vous aurez probablement compris que ma question est : savez-vous comment je pourrais me sortir de là ?
À noter que je placerai le tout en ligne et sous licence GNU. S'il vous tente de jeter un œil sur le projet, faites le moi savoir.
Je vous remercie pour l'attention que vous aurez porté à ce post.
Cordialement