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
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
John
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
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
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
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
En 4086b39e$0$513$636a15ce@news.free.fr, 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 ?
Si tu remplaces scanf() par fgets, cela fait pareil, non ? Et par read(0,...) aussi, non ?
Antoine
Yves ROMAN
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.
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.
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
"Yves ROMAN" a écrit dans le message de 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
"Yves ROMAN" <yves.roman@NO.unilog.SPAM.fr> a écrit dans le message de
news:408CD855.DA2DD338@NO.unilog.SPAM.fr...
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 ...
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 ...