signal ctrl + d - C - Programmation
Marsh Posté le 08-01-2005 à 13:57:46
oui j'ai vu sur un poste ici. mais le nom....
Marsh Posté le 08-01-2005 à 14:15:35
ReplyMarsh Posté le 08-01-2005 à 14:21:00
et je trouve pas non plus ctrl+\
y'a pas une liste autre que signal.h et qui explique la combinaison de touche qui correspond ?
Marsh Posté le 08-01-2005 à 14:34:06
CTRL-D c'est pas un signal, c'est juste EOF ?!
Tu confonds pas avec CTRL-C ? Ça ça interrompt ton programme généralement, et ça envoie le signal SIGINT. Les combinaisons de touches, c'est lié au shell...
Marsh Posté le 08-01-2005 à 14:47:20
Dans mon sujet :
Citation : Le mini-shell agit de la sorte en boucle jusqu'à saisir exit ou recevoir la fin de fichier ctrl D. |
comment je fais ca ? comment on sait si un shell a reuc la fin de fichier ?
Marsh Posté le 08-01-2005 à 14:56:02
getchar (), fgets (), etc. et feof () renvoient EOF en fin de fichier.
Marsh Posté le 08-01-2005 à 15:04:59
Tiens vla un bout de programme à étudier pour toi, ca devrait t'aider à comprendre comment on intercepte un signal
Code :
|
Sinon EOF n'est pas un signal et CTRL+\ c'est SIGABRT....
Marsh Posté le 08-01-2005 à 15:11:10
oui j'ai compris ton exemple, car il fallait annuler le comportement par defaut de crtl + c. mais sortir d'une boucle lorsquon recoit ctrl+d je vois pas comment on fait. je fais des fgets pour recuperer mes commandes. si c ctrl+d, mon buffer issu de fgets contiendrait quoi ?
Marsh Posté le 08-01-2005 à 15:13:28
ben à moins que je me trompe, tu fais un :
"tant que je lis un truc sur l'entrée standard { blabla }"
et le fait de taper ctrl+D te fera sortir de ce while.
Marsh Posté le 08-01-2005 à 15:19:27
Ouais je me suis trompé fgets ne renvoie pas EOF... Dans ce cas il faut utiliser feof (), qui ne renvoie pas EOF non plus mais une valeur non nulle en fin de fichier.
Je vais me coucher.
Marsh Posté le 08-01-2005 à 15:39:31
Xavier_OM a écrit : ben à moins que je me trompe, tu fais un : |
merci. c'était donc ca........
Marsh Posté le 08-01-2005 à 17:52:59
blurk a écrit : Ouais je me suis trompé fgets ne renvoie pas EOF... Dans ce cas il faut utiliser feof (), qui ne renvoie pas EOF non plus mais une valeur non nulle en fin de fichier. |
Non. Il faut utiliser la valeur retournée par fgets(). Si c'est NULL, c'est que la lecture a été interrompue. Le plus souvent, cette information suffit.
|
Si on tient à en connaitre la cause, on utilise feof() et ferror() pour lever le doute entre fin de fichier (EOF) et erreur systeme (effacement, lock ...). Les valeurs retournées par ces fonctions ne sont valides que si la fin de lecture a été detectée.
|
http://mapage.noos.fr/emdel/notes.htm#fichiers
Marsh Posté le 10-01-2005 à 13:30:37
Pour ctrl-d, tu peux utiliser la fonction atexit qui te permet de lancer une fonction en quittant le programme. Ca marche avec un return dans le main, un exit n'importe ou... et un ctrl-d.
Sinon du cote de termios et avec tcgetattr et tcsetattr tu peux annuler l'envoi du EOF mais c'est un peu plus complique.
Marsh Posté le 08-01-2005 à 13:53:25
voila, je dois intercepter ctrl+d, mais je trouve absolument pas du tout a quoi ca correspond ?
j'ai eu beau googlé, pas moyen de trouvé ca. et sur ce meme forum, kkun adit, donc pas moyen de changer son comprtement ? pas de réponse ...
merci !
edit: euh... precision je sais intercepter un signal, c juste le nom que je cherce... j'ai fait du more signal.h sous mon nux, pas moyen de trouver....
Message édité par meumeul le 08-01-2005 à 13:54:40