IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

problème Ctrl-Z


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut problème Ctrl-Z
    Bonjour à tous,

    cela fait trois jours que je suis sur ce problème , quelqu'un pourrait-il m'aider svp :
    But: en gcc, envoyer un sms via le port serie ttyS0 vers un modem gsm.
    Tout est ok sauf l'envoi du caractère Ctrl-Z .
    Pouvez-vous m'aider, j'ai déjà tout essayé.
    char ctrlz=29;
    write(fd,ctrlz,1) (fd=open ttyS0 ...)

    Merci

    jfcocu

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    A première vue tu developpe sous Linux? Je ne sais pas si ça peut venir de là mais la séquence ctrl+Z envoi un signal SIGSTOP à l'application qui est peu être interprété comme tel par je_ne sais_pas_qui.
    Quel genre erreur obtiens tu? Le message, s'il y en a un, pourrait nous aider à y voir plus clair.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Je n'ai pas de message d'erreur ! ! !
    Developpement avec Anjuta sous debian. Modem GSM Westermo GS-01.
    Pour signaler au modem qu'il peut envoyer le sms, la sequence doit se finir avec un CTRL-Z.
    Je parviens à ouvrir et envoyer vers le modem, mais lorsque j'envoi la commande CTRL-Z, le modem ne l'interprête pas et attend, indéfiniment .
    C'est certainement du à un problème d'interprétation de code entre windows et linux !

    Help

    jfcocu

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    http://www.faqs.org/docs/Linux-HOWTO/Serial-Programming-HOWTO.html

  5. #5
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut Re: problème Ctrl-Z
    Citation Envoyé par jfcocu
    char ctrlz=29;
    CTRL-Z n'est pas égale à 26 ???

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut Re: problème Ctrl-Z
    Citation Envoyé par jmv
    Citation Envoyé par jfcocu
    char ctrlz=29;
    CTRL-Z n'est pas égale à 26 ???
    Si si

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    sous unixoide, comme le dit gege2061, ctrl-Z n'est pas tout à fait STOP, c'est plutôt "background"..

    Ton appli existe, est suspendue, et est en background.

    Dès que tu l'as fait, tu reviens au shell. Il suffit que tu retapes "fg" pour la ravoir..

    Ce n'est donc vraisemblablement pas ça que tu cherches à faire...

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 387
    Points : 23 702
    Points
    23 702
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    sous unixoide, comme le dit gege2061, ctrl-Z n'est pas tout à fait STOP, c'est plutôt "background"..
    Je ne suis pas tout-à-fait d'accord. Sous Linux, en tout cas, Ctrl-Z suspend effectivement le programme (status T) et il faut entrer bg (BackGround) pour le faire redémarrer en arrière plan.

    Le même effet peut être émulé avec kill (testé avec bash). On lance un programme en avant-plan de façon habituelle puis, depuis un autre shell, on fait un « kill -SIGSTOP » sur le processus concerné. Celui-ci s'interrompt et le même message qu'avec Ctrl-Z apparaît sur sa console. Le shell rend alors la main à l'utilisateur. Si alors, depuis le second shell, on redémarre le processus avec SIGCONT, celui-ci passe automatiquement en arrière-plan dans sa console puisque la main est toujours à l'utilisateur.

    Je n'ai pas essayé sur d'autres unices.

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    ce que je veux dire, c'est que STOP est équivalent à CTRL-C..

    CTRL-Z suspend..

  11. #11
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    La transformation de caracteres en signaux ne se fait a ma connaissance que pour des lecture de termaux, jamais en ecriture.

    Cette transformation est configurable (stty donne une interface pour acceder a cette configuration).

    La configuration normale est d'avoir
    NOM: touche -> nom du signal
    INTR: CTRL-C -> SIGINT
    QUIT: CTRL-\ -> SIGQUIT
    SUSP: CTRL-Z -> SIGTSTP

    SIGTSTP est interceptable (SIGSTOP ne l'est pas).

    Le gestionnaire de terminal a d'autres choses configurables, donc un caractere appele STOP (generalement CTRL-S) servant a faire du controle de flux en collaboration avec START (generalement CTRL-Q).

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 387
    Points : 23 702
    Points
    23 702
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    ce que je veux dire, c'est que STOP est équivalent à CTRL-C.. CTRL-Z suspend..
    Si, par « STOP », tu entends SIGSTOP, alors ce n'est pas vrai :

    Ctrl-C envoie SIGINT
    Ctrl-Z envoie SIGSTOP

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Si, par « STOP », tu entends SIGSTOP, alors ce n'est pas vrai :

    Ctrl-C envoie SIGINT
    Ctrl-Z envoie SIGSTOP
    quand je dis STOP je dis "arrête le programme" (voir ci-dessus SIGINT).

    quand je dis "suspend", je dis .... "suspend" (dès qu'on re-démarre, le programme redémarre à l'endroit où il était, pas depuis 0). Ce qui est le comportement donné par CTRL-Z et non pas CTRL-C..

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Le problème, c'est qu'apparement, c'est SIGSTOP qui "suspend" et SIGINT qui "stoppe"...

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Le problème, c'est qu'apparement, c'est SIGSTOP qui "suspend" et SIGINT qui "stoppe"...
    eh oui

    Mais CTRL-Z est utilisé pour quitter (équivalent SIGINT) dans certains programmes (ftp, telnet, etc etc..).

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Équivalent de SIGINT, ou de Ctrl+D ?

  17. #17
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 387
    Points : 23 702
    Points
    23 702
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Équivalent de SIGINT, ou de Ctrl+D ?
    Ctrl-D n'envoie pas de signal Unix, à ma connaissance, mais comme Ctrl-D correspond au caractère 04 « End Of Transmission », les lignes qui le gèrent l'interprètent au sens propre et émulent un EOF sur le flux en lecture ...

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    C'est justement pour ça que je pose la question.
    Ctrl-Z n'envoie pas non plus de signal sous DOS & Windows, et je doute qu'un serveur le traite comme un signal non plus...

  19. #19
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Ctrl-D n'envoie pas de signal Unix, à ma connaissance, mais comme Ctrl-D correspond au caractère 04 « End Of Transmission », les lignes qui le gèrent l'interprètent au sens propre et émulent un EOF sur le flux en lecture ...
    CTRL-D est interprete par le gestionnaire de terminal de Unix, exactement comme CTRL-C etc, mais l'effet n'est pas un signal mais d'envoyer le buffer tel quel, eventuellement vide. Hors les programmes Unix ont l'habitude de considerer une lecture ne renvoyant rien comme signal de fin de fichier (en fait, c'est plus qu'une habitude, c'est la convention sous Unix, l'OS ne fait rien d'autre meme pour les fichiers sur disque). Donc un CTRL-D sur un terminal comme premier caractere d'une ligne est interprete comme une fin de fichier. Si il suit d'autres caracteres, il vide simplement le buffer du gestionnaire de terminal.

  20. #20
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 387
    Points : 23 702
    Points
    23 702
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    quand je dis STOP je dis "arrête le programme" (voir ci-dessus SIGINT).

    quand je dis "suspend", je dis .... "suspend" (dès qu'on re-démarre, le programme redémarre à l'endroit où il était, pas depuis 0). Ce qui est le comportement donné par CTRL-Z et non pas CTRL-C..
    C'est encore plus subtil parce que le SIGHUP existe également et tue le programme également, par défaut. Sauf qu'il me semble que Hang Up s'entend dans le sens « plantage » (à vérifier). En tout cas, man 7 signal dit de lui :

    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           Signal     Value     Action   Comment
           ----------------------------------------------------------------------
           SIGHUP        1       Term    Hangup detected on controlling terminal
                                         or death of controlling process
    Sinon, tout dépend de ce que l'on entend par STOP, justement. « Arrêter » ne signifie pas forcément « Terminer » puisque justement, son pendant est « Reprendre ». En Basic, l'instruction STOP était différente de END, elle provoquait un Break (que l'on déclenchait en temps normal par Ctrl-C ).

    Sous Unix, il y a au moins sept signaux différents pour arrêter l'exécution d'un processus.

    SIGSTOP, qui mets le processus en attente pour être repris,

    et, si je ne dis pas de bêtises :

    SIGTERM qui demande au programme de se finir de lui-même (donc mort par défaut),
    SIGQUIT qui indique qu'on a demandé à sortir depuis le clavier,
    SIGABRT, envoyé par le processus lui-même pour dire qu'il n'ira pas à terme (abort(), généralement envoyé en cas d'exception non rattrapée) ;
    SIGHUP, décrit ci-dessus ;
    SIGKILL, terminaison de force (le programme ne se verra même pas mourir)
    SIGINT interruption au clavier.

Discussions similaires

  1. Problème Ctrl + Molette = Décomposition de la charte graphique
    Par csik78 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 18/06/2012, 10h42
  2. Problème Ctrl+C avec Panel
    Par phil3875 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/01/2010, 11h07
  3. Problème avec le ctrl+espace
    Par nargzul dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/05/2008, 16h57
  4. Problème de création de raccourci clavier (Ctrl+O)
    Par Milowen dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2006, 18h31
  5. [Eclipse][Java]Problème de compilation sur CTRL+S
    Par ZeKiD dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 27/05/2004, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo