Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1432 connectés 

  FORUM HardWare.fr
  Programmation
  C

  signal ctrl + d

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

signal ctrl + d

n°949110
meumeul
Stay Heavy
Posté le 08-01-2005 à 13:53:25  profilanswer
 

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
mood
Publicité
Posté le 08-01-2005 à 13:53:25  profilanswer
 

n°949115
EpoK
Let's burn
Posté le 08-01-2005 à 13:56:36  profilanswer
 

ctrl+d ça correspond à EOF :o

n°949116
meumeul
Stay Heavy
Posté le 08-01-2005 à 13:57:46  profilanswer
 

oui j'ai vu sur un poste ici. mais le nom....


Message édité par meumeul le 08-01-2005 à 13:58:31
n°949142
EpoK
Let's burn
Posté le 08-01-2005 à 14:15:35  profilanswer
 

meumeul a écrit :

oui j'ai vu sur un poste ici. mais le nom....


 
 
je sais pas  :sweat:

n°949145
meumeul
Stay Heavy
Posté le 08-01-2005 à 14:21:00  profilanswer
 

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 ?

n°949149
blurk
Posté le 08-01-2005 à 14:34:06  profilanswer
 

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...


Message édité par blurk le 08-01-2005 à 14:38:32
n°949159
meumeul
Stay Heavy
Posté le 08-01-2005 à 14:47:20  profilanswer
 

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 ?

n°949167
blurk
Posté le 08-01-2005 à 14:56:02  profilanswer
 

getchar (), fgets (), etc. et feof () renvoient EOF en fin de fichier.

n°949175
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 08-01-2005 à 15:04:59  profilanswer
 

Tiens vla un bout de programme à étudier pour toi, ca devrait t'aider à comprendre comment on intercepte un signal ;)
 
 

Code :
  1. /***
  2. *
  3. * Programme qui reçoit 5 CTRL-C avant de se stopper
  4. *
  5. *
  6. ***/
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <signal.h>
  10. void Recuperation(int sig)
  11. {
  12.     static int compt = 0;
  13.     switch (sig) {
  14.     case SIGSEGV: printf("Arrrrrgh, il s'en est fallu de peu\n" );
  15.         /* La seule chose que l'on peut faire ici est de terminer le
  16.          * programme puisqu'on ne sais pas reparer l'erreur. Un simple
  17.          * return provoquerait une boucle
  18.          */
  19.         exit(1);
  20.     case SIGINT:  if (++compt == 5) {
  21.             printf("J'en ai assez!!\n" );
  22.             exit(1);
  23.         }
  24.         else
  25.             printf("OK je recupere le signal SIGINT\n" );
  26.     }
  27. }
  28. int main()
  29. {
  30.     char t[1];
  31.     int i=0;
  32.     signal(SIGSEGV, Recuperation);
  33.     signal(SIGINT,  Recuperation);
  34.     printf("Taper 5 ^C pour arreter le programme ou return pour continuer\n" );
  35.     /* On met le programme en attente : attention, sleep() ne conviendrait pas
  36.      * ici (essayez, vous verrez et lisez la page du manuel de sleep (man 3
  37.      * sleep). */
  38.     getchar();
  39.     /* On provoque un SIGSEGV car on sort du tableau t */
  40.     while(1) t[i++] = '!';
  41. }


 
Sinon EOF n'est pas un signal et CTRL+\ c'est SIGABRT....


Message édité par Xavier_OM le 08-01-2005 à 15:08:26

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°949180
meumeul
Stay Heavy
Posté le 08-01-2005 à 15:11:10  profilanswer
 

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 ?

mood
Publicité
Posté le 08-01-2005 à 15:11:10  profilanswer
 

n°949186
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 08-01-2005 à 15:13:28  profilanswer
 

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.


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°949194
blurk
Posté le 08-01-2005 à 15:19:27  profilanswer
 

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. ;)

n°949208
meumeul
Stay Heavy
Posté le 08-01-2005 à 15:39:31  profilanswer
 

Xavier_OM a écrit :

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.


 
merci. c'était donc ca........  :cry:

n°949275
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-01-2005 à 17:52:59  profilanswer
 

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.


   while (fgets(...) != NULL)
   {
   }


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.
 


   while (fgets(..., fp) != NULL)
   {
   }
 
   /* apres coup uniquement... */
   if (ferror (fp))
   {
      /* erreur de lecture */
      perror ("nom du fichier" );
   }
   else if (feof (fp))
   {
      /* fin normale du fichier */
   }
   else
   {
      /* cause inconnue */
   }
 


 
http://mapage.noos.fr/emdel/notes.htm#fichiers


Message édité par Emmanuel Delahaye le 08-01-2005 à 18:07:42

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°949955
souliane
Posté le 10-01-2005 à 13:30:37  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  signal ctrl + d

 

Sujets relatifs
[C]Valeur en volt de la tension d'un signal Audio en entréealgo, decodage signal numerique
[awt/swing][résolu] listener sur ALT ou CTRL uniquement[HELP] Comment bloquer les touches Windows & Ctrl Alt Supp ?
Ctrl ouverture fichier[Perl] Arrêter un programme proprement lors d'un Ctrl + C
POSIX Que faire apres avoir attrape un signalSignal Handler (segmentation fault)
Enregistrer sous (comme Ctrl-S)[QT] J'arrive pas à connecter mon signal
Plus de sujets relatifs à : signal ctrl + d


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR