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 :

Utilisation de system() pour appeler une application


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Utilisation de system() pour appeler une application
    Bonjour

    J'ai besoin d'écrire un code capable d'envoyer un mail

    Pour ce faire, je souhaite utiliser l'application telnet, ce qui fonctionne très bien quand j'écris mes instructions directement dans l'invité de commande.

    Mais dés que j'essaye d'appeler telnet depuis mon code (avec la fonction system() que j'ai découverte pour l'occasion), l'invité de commande renvoit le message d'erreur suivant :
    'telnet' n'est pas reconnu en tant que commande interne ou externe, un programme executable ou un fichier de commandes.

    D'après mes recherches, c'est un message d'erreur courant sous W7 pour telnet, la solution proposée sur Internet est de rentrer pkgmgr /iu:TelnetClient dans le terminal, ce que j'ai donc essayé en utilisant system(), mais là, une fenêtre s'ouvre pour m'afficher le message d'erreur suivant :
    Echec de l'opération avec 0x8007000B
    Tentative de chargement d'un programme de format incorrect

    A noté que pkgmgr /iu:TelnetClient s'exécute sans soucis si je le lance encore une fois depuis le terminal et non pas depuis mon code C via system()

    Je ne trouve personne sur Internet qui décris le problème que j'ai, donc je commence légèrement à désespérer ^^' :'(

    Voilà mon code (rien de très effrayant) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdlib.h> 
    #include <stdio.h> 
    #include <string.h> 
     
    int main () 
    {  
    //  system("pkgmgr /iu:TelnetClient");
    //  system("pkgmgr /iu:TelnetServer");
        system("telnet");
        getchar();
        return 0; 
    }
    Donc voilà, j'essaye de comprendre ce que l'utilisation de system() peut bien faire de terrible pour empêcher l'execution de telnet

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et tu as essayé d'utiliser libtelnet?

    En général, pour toute tentative d'utiliser system("un programme");, il y a une bibliothèque à utiliser sans passer par la fonction system. Très souvent, c'est libunprogramme.

    L'avantage de la bibliothèque sur le programme, c'est qu'en général, le programme est codé comme une interface ligne de commande de la bibliothèque.
    Tu y gagneras en clarté, parce que tu n'auras pas à piloter un programme qui espère un utilisateur via un flux texte, mais par des fonctions.
    Mais aussi en possibilité, parce que la bibliothèque est en général plus vaste que l'application.

    Cela dit, pour ton problème précis, c'est que le programme ne trouve pas telnet dans son PATH, et je ne sais pas comment le résoudre, ne connaissait rien à Windows.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour

    As tu essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("cmd /c telnet")
    Normalement c'est la seule façon de faire traiter le PATH sous Windows...

    Cependant ceci va t'ouvrir une fenêtre qui attendra que quelqu'un tape les bonnes commandes pour se connecter.
    Et si tu as toujours le même message, c'est que telnet n'est pas installé... Vérifie en essayant uniquement
    Cordialement

  4. #4
    Membre averti
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Points : 411
    Points
    411
    Par défaut
    Bonjour silvanor,

    Pour envoyer des e-mails depuis un code C, tu peux utiliser la bibliothèque libcurl, qui, entre autres choses, sait se comporter comme un client smtp.

    Tu as des exemples dans la documentation :

    http://curl.haxx.se/libcurl/c/smtp-mail.html (simple)
    http://curl.haxx.se/libcurl/c/smtp-tls.html (authentifié)
    etc.

    Si tu ne sais pas comment installer libcurl, tu peux t'inspirer de ce tutoriel :

    http://alexandre-laurent.developpez....-bibliotheque/


    Eks

Discussions similaires

  1. utiliser CallWindowProc pour appeler une fonction
    Par cbleas dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2009, 07h17
  2. Réponses: 2
    Dernier message: 22/10/2007, 14h33
  3. Réponses: 1
    Dernier message: 29/12/2005, 13h25
  4. Utiliser une touche pour appeller une fonction
    Par Hide dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2005, 16h59
  5. touche pour accéder à une application : hook system?
    Par Fox_magic dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/01/2003, 00h02

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