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

Bibliothèques, systèmes et outils C Discussion :

[pipe] Faire une redirection depuis le C


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut [pipe] Faire une redirection depuis le C
    Bonjour,

    Je dois implementer un fonction ZModem avec la command (l)rs/z. Cependant, comme nous n'utilisons pas le port série par défaut, nous devons faire une redirection. Cela fonctionne plutôt bien dans un shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ~ # rz -b < /dev/ttyGS0 > /dev/ttyGS0
    Cependant, je dois faire ceci depuis un code C est j'ai quelque soucis pour me sortir du "pipe hell" et cela ne marche pas car je fais les choses faux :
    PS : Le processus à été forké au préalable et le processus parent doit "killer" la commande rz si un timeout est atteint. Le port série a été ouvert au préalable et son file descriptor et dans "serialFD"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    void UpdateAgent::doZmodemCommand(){
    	char* zmodemCmd = "/usr/local/bin/rz";				// The ZModem command
    	char *zmodemArgs[] = {zmodemCmd, "-b", (char *) 0 };// Zmodem args
     
    #ifdef DEBUG
    	cout << "ZModem command is " << zmodemCmd << endl;
    #endif
     
    	// Give serial in/out as stdr in/our for rz
    	if(dup2(0, serialFD) < 0){
    		perror("Couldn't dup2 !");
    		exit(-1);
    	}
    	if(dup2(1, serialFD) < 0){
    		perror("Couldn't dup2 !");
    		exit(-1);
    	}
     
    	if(execv(zmodemCmd, zmodemArgs) < 0){
    		perror("Couldn't execv ZModem command !");
    		exit(-1);
    	}
     
    	// Child exits here
    	exit(0);
    }
    Voilà si quelqu'un pourrait m'aiguiller sur comment écrire l'équivalent en C ou m'indiquer qu'est-ce qui est faux !

    Merci !

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Tu utilises dup2() à l'envers. Si tu veux que ton fd 0 soit "connecté" à /dev/ttyGS0 qui est ouvert en tant que fd serialFD, tu dois faire :
    Après tes deux dup2(), n'oublie pas de fermer serialFD, qui ne sert plus à rien :
    Et en passant, ton code c'est du C++ et pas du C.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Oui effectivement ... Ca marche comme ça !

    Merci pour la remarque et j'espère qu'un jour je mettrai des posts qui servent à quelque chose !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] listes liées : faire une redirection
    Par _nico42_ dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/10/2006, 13h28
  2. Faire une redirection
    Par kevinf dans le forum Langage
    Réponses: 4
    Dernier message: 16/10/2006, 16h41
  3. Comment faire une redirection WEB ?
    Par fredhali2000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/10/2006, 03h03
  4. comment faire une redirection vers une page qui contient des framsets
    Par zana74 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 31/08/2006, 13h03
  5. Réponses: 5
    Dernier message: 28/05/2006, 13h18

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