Pages : 1
#1 Le 19/10/2016, à 16: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
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 :
la requête échoue avec le code erreur EINTR,
le programme principal traite l'interruption,
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
Donut
Dernière modification par DonutMan75 (Le 19/10/2016, à 17:02)
Hors ligne