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 :

Utiliser des commandes MS-DOS en langage C ? [Non suivi]


Sujet :

C

  1. #1
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut Utiliser des commandes MS-DOS en langage C ?
    Boujour a tous,
    je suis étudiant et j'ai un devoir a rendre sur un programme a réaliser en C.
    Le but du programme est de faire un interpreteur de commande simple, efficace et en francais.
    Par exemple pour regarder le contenu d'un fichier txt, on tape "voir fichier.txt".
    plusieurs commande sont a realiser mais pour cela, il faut que j'utilise les commandes integrer a windows...
    Le seule probleme c'est que je ne sais pas vraiment comment faire.
    Par exemple, si je veux creer un répertoire, je vais saisir dans mon interpreteur de commande "nvdossier" "nom_du_dossier" mais pour cela, je vais devoir utiliser la commande mkdir "nom_du_dossier" .
    Si quelqu'un pouvait m'aider, j'en serais très reconnaissant !
    merci

    EDIT: j'ai recherché sur google mais je n'ai malheureusement pas trouvé de réponses satisfaisante.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    system() de stdlib.h avec une chaine de commande construite par sprintf() de stdio.h.

  3. #3
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    j'avais trouvé une piste sur system() mais sans avoir réellement compris comment ca marchait.
    Mais je ne vois pas vraiment comment utiliser system() et sprintf() pour l'associé a une commande ms-dos. Dois-je lui preciser le chemin des commandes ?

  4. #4
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 327
    Points : 252 884
    Points
    252 884
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas où le problème. Tu formates ta ligne de commande avec sprintf() comme si tu le tapais dans ton shell et tu appelles system() avec cette chaîne.

    system() passe par cmd.exe donc à ce titre si tu n'as pas besoin de mettre le chemin de commande sur le shell, tu n'as pas besoin de le mettre dans ton instruction system().
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Une autre solution consiste à appeller directement une commande système pour effectuer le même boulot, reste à déterminer sur quel OS tu te bases et à chercher la dite commande.

  6. #6
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par Anomaly
    Je ne vois pas où le problème. Tu formates ta ligne de commande avec sprintf() comme si tu le tapais dans ton shell et tu appelles system() avec cette chaîne.

    system() passe par cmd.exe donc à ce titre si tu n'as pas besoin de mettre le chemin de commande sur le shell, tu n'as pas besoin de le mettre dans ton instruction system().
    ah d'accord, je ne pensais pas que sa marchait comme ca !
    sa fonctionne pour windows et linux ??
    par exemple si je tape dir pour windows et si je tape ls pour linux sa marche ?

  7. #7
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    j'ai testé la commande dir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    #include <stdlib.h>
     
    int main&#40;void&#41;
    &#123;
    	printf&#40;"test de la commande dir"&#41;;
    	system&#40;"dir"&#41;;
    	getchar&#40;&#41;;
    	return 0;
    &#125;
    sa marche parfaitement. encore merci.
    plus qu'a tester avec linux

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spidermeu
    sa fonctionne pour windows et linux ??
    par exemple si je tape dir pour windows et si je tape ls pour linux sa marche ?
    system() passe une commande au shell (interpréteur de commande courant du système) sous la forme d'un texte (chaine de caractères). Du moment que cette commande est connue du shell, ça marche.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    ok, mais si je fais ca par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    #include <stdlib.h>
     
    int main&#40;void&#41;
    &#123;
    	printf&#40;"test de la commande dir"&#41;;
    	system&#40;"dir c&#58;\windows\"&#41;;
    	getchar&#40;&#41;;
    	return 0;
    &#125;
    pourquoi sa ne marche pas ??

  10. #10
    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,

    Citation Envoyé par Spidermeu
    pourquoi sa ne marche pas ??
    pourquoi ça ne marche pas, tu as un message d'erreur ?

  11. #11
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    en pratique sa marche pas, le dir marche mais dans le répertoire courant, pas dans c:\windows\

    EDIT: bizarre, quand je remplace c:\windows\ par D: ( un hdd de ma machine), il reconnait la commande et m'affiche le contenu de D:
    Lorsque je remplace c:\windows\ par C: , il m'affiche le contenu du repertoire courant ( mes documents)

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spidermeu
    pourquoi sa ne marche pas ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	system&#40;"dir c&#58;/windows"&#41;;
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	system&#40;"dir c&#58;/windows"&#41;;
    lorsque j'execute ce message apparait :
    test de la commande dirLe format du paramètre est incorrect - "windows".

    En faites c'est bon , il fallait mettre

    dir c:\\windows\\

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spidermeu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	system&#40;"dir c&#58;/windows"&#41;;
    lorsque j'execute ce message apparait :
    test de la commande dirLe format du paramètre est incorrect - "windows".

    En faites c'est bon , il fallait mettre

    dir c:\\windows\\
    Curieux. Quel est le système ? Ok, j'ai pareil sous XP. Il semblerait que les vielles commandes d'origine DOS n'aient pas été adaptées aux nouveaux formats. A moins que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system &#40;"dir \"c&#58;/windows\""&#41;;
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Je viens de tester sous cmd, ça fait la même erreur.
    N'oublions pas que les commandes DOS (et par extension, pour tous les batches Windows) ont leurs paramètres traditionnellement introduits par "/"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Médinoc
    Je viens de tester sous cmd, ça fait la même erreur.
    N'oublions pas que les commandes DOS (et par extension, pour tous les batches Windows) ont leurs paramètres traditionnellement introduits par "/"...
    Essaye avec les "", ça force me mode étendu qui supporte les / à la place des \.
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    et une autre petite question...( décidement)...

    Quand je saisie ce code :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    #define N 15
     
    int main&#40;void&#41;
    &#123;
    	char phrase&#91;N&#93;;
     
    	printf&#40;"la commande dir&#58;\n"&#41;;
       scanf&#40;"%s",phrase&#41;;
       system&#40;phrase&#41;;
       getchar&#40;&#41;;
       return 0;
    &#125;
    l'invite de commande disparait directement... est-ce que j'ai le droit d'utiliser phrase comme ca ?

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    1°) Sans doute un problème avec getchar()... Essaie en le remplaçant pas system("pause") sous Windows...
    2°) Le scanf() utilisé ainsi, c'est très mauvais : utilise fgets().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spidermeu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       scanf("%s",phrase);
       getchar();
    Mauvais choix de fonction de saisie

    http://emmanuel-delahaye.developpez....e=Page6#LXXXII
    http://emmanuel-delahaye.developpez....=Page6#LXXXIII

    l'invite de commande disparait directement... est-ce que j'ai le droit d'utiliser phrase comme ca ?
    Oublie Dev-C++ et passe à Code::Blocks.
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    merci beaucoup pour c'est info

Discussions similaires

  1. utilisation des commandes "." et "exec"
    Par khaliloum dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2007, 10h08
  2. Réponses: 2
    Dernier message: 16/12/2006, 18h37
  3. Erreur utilisation des commandes shell
    Par paolo2002 dans le forum Windows XP
    Réponses: 7
    Dernier message: 05/11/2006, 15h09
  4. utilisation des commandes shell dans un programme C
    Par rasgueados dans le forum Linux
    Réponses: 15
    Dernier message: 03/08/2006, 18h25
  5. Utiliser une commande du DOS
    Par nkd dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 21/10/2005, 08h34

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