Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/10/2016, à 17:36

DonutMan75

[C] Se prémunir d'une erreur EINTR

Bonjour à tous,
promis c'est la dernière fois que je vous embête avec ce programme C wink

Lors d'une attente d'une requête, par exemple via la fonction msqrcv(), il se peut qu'une interruption logicielle intervienne (typiquement la réception d'un signal).
Auquel cas et dans l'ordre :

  1. la requête échoue avec le code erreur EINTR,

  2. le programme principal traite l'interruption,

  3. le programme principal reprend son exécution juste après l'appel de la requête.


Pour se prémunir de ce problème, j'ai tenté d'introduire une boucle while du genre :

while ( (l = msgrcv(msqid, &la_requete, sizeof(struct requete) - sizeof(long), (long) 1, 0)) < 0)
	{
	}

       
Ca marche très bien : si un appel msgrcv() échoue à cause d'une interruption système, le programme principal relance la boucle jusqu'à obtenir une réponse satisfaisante.
Au bout d'un temps (très court) on sort de cette boucle.

Problème : il se peut qu'une autre erreur fasse *systématiquement* échouer mon appel et auquel cas je rentre dans une boucle infinie...

Comment pourrais-je modifier ce programme pour ne looper que si l'erreur est effectivement EINTR ?

Merci d'avance smile

Donut

Dernière modification par DonutMan75 (Le 19/10/2016, à 18:02)

Hors ligne