Retarder l’arrêt intempestif d’un programme pour sauvegarder des données

Problème

Votre programme s’arrête, ce qui vous fait perdre toutes vos données.

Solution

Utilisez setjmp() et longjmp() pour revenir à une situation stable afin de sauvegarder vos données. Ne supprimez jamais l’ancienne sauvegarde avant d’en avoir faite une nouvelle.

Discussion

Avant de chercher à anticiper un arrêt intempestif du programme, il est possible de programmer une sauvegarde automatique toutes les N minutes, N étant défini par l’utilisateur. Pour cela, le mieux est d’utiliser les signaux, en particulier le signal SIGALRM et la fonction alarm() comme décrit dans la recette "Envoyer un signal" (chapitre "Signaux"). Cependant, il est préférable de nommer différemment cette sauvegarde passive régulière pour ne pas risquer de perdre les données sauvegardées activement par l’utilisateur.

Les fonctions setjmp() et longjmp(), qui sont bien standard (POSIX), sont à utiliser avec parcimonie. Elles consistent à mettre une sorte de point de contrôle afin de pouvoir y revenir (comme avec l’instruction goto) mais en effectuant un véritable retour en arrière, comme si la suite du programme ne s’était jamais exécutée. Pour cette raison, le débogage peut être rendu très difficile car en cas de manifestation d’un bogue, nous...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Afficher le contenu d'une variable
Suivant
Limiter les risques d'erreurs de segmentation