Débloquer un Scanf SIGALRM

Le
John
Bonjour,
j'essaie de "débloquer" un scanf apres 2 secondes par exemple, mais je n'y
arrive pas.
Je pensais que c'été avec SIGALRM, mais ça ne veux pas. J'intercepte bien le
signal et affiche un message, mais le processus est toujours en attente du
scanf :(

voici en gros ce que je fais

handler
{
// Interception du SIGALRM
// Relance alarm(2)
}

main()
{

while(condition)
{
alarm(2);
affiche_menu(); // c'est dans cette fonction qu'on met un scanf
}

}

Si vou pouviez me donner une idée ?

Merci

John
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
John
Le #618423
Si vou pouviez me donner une idée ?


fr.comp.sys.unix ?

Si tu remplaces scanf() par fgets, cela fait pareil, non ?
Et par read(0,...) aussi, non ?


Antoine



C bon j'ai trouve ...
mais je ne comprend pas pourquoi

en fait j'avais attaché les signaux a la fonction "handler" avec la fonction
"signal(SIGALRM, handler)".
J'ai remplacé ça par un "sigaction(SIGALRM, &action, NULL)"
avec "action.sa_handler = handler"
et maintenant il me débloque bien le scanf.

Si quelqun sais pourquoi sigaction permet de débloquer le scanf plutot que
signal, j'aimerai bien comprendre

Merci


Antoine Leca
Le #617993
En 4086b39e$0$513$, John va escriure:
Si vou pouviez me donner une idée ?


fr.comp.sys.unix ?

Si tu remplaces scanf() par fgets, cela fait pareil, non ?
Et par read(0,...) aussi, non ?


Antoine

Yves ROMAN
Le #614955


C bon j'ai trouve ...
mais je ne comprend pas pourquoi

en fait j'avais attaché les signaux a la fonction "handler" avec la fonction
"signal(SIGALRM, handler)".
J'ai remplacé ça par un "sigaction(SIGALRM, &action, NULL)"
avec "action.sa_handler = handler"
et maintenant il me débloque bien le scanf.

Si quelqun sais pourquoi sigaction permet de débloquer le scanf plutot que
signal, j'aimerai bien comprendre



C'est sans doute le SA_RESTART qui est baissé par sigaction(), ce qui fait que
le signal interrompt les appels système qui sortent avec un errno a INTR.
Par defaut ce flag doit être levé, et les appels systèmes reprennent sans rendre
la main à l'appelant.

John
Le #614658
"Yves ROMAN" news:


C bon j'ai trouve ...
mais je ne comprend pas pourquoi

en fait j'avais attaché les signaux a la fonction "handler" avec la
fonction


"signal(SIGALRM, handler)".
J'ai remplacé ça par un "sigaction(SIGALRM, &action, NULL)"
avec "action.sa_handler = handler"
et maintenant il me débloque bien le scanf.

Si quelqun sais pourquoi sigaction permet de débloquer le scanf plutot
que


signal, j'aimerai bien comprendre



C'est sans doute le SA_RESTART qui est baissé par sigaction(), ce qui fait
que

le signal interrompt les appels système qui sortent avec un errno a INTR.
Par defaut ce flag doit être levé, et les appels systèmes reprennent sans
rendre

la main à l'appelant.


D'accord, j'ai fais quelque recherches sur SA_RESTART, ça explique bien ce
qui se passais ...

Merci

John


Publicité
Poster une réponse
Anonyme