+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 34
  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 : 116
    Points
    116

    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 Expert
    Inscrit en
    décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 1 478
    Points : 1 661
    Points
    1 661

    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 : 116
    Points
    116

    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
    Développeur et Administrateur système
    Inscrit en
    juin 2003
    Messages
    9 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur et Administrateur système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2003
    Messages : 9 056
    Points : 31 234
    Points
    31 234
    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 Confirmé Sénior
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    avril 2005
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

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

    Informations forums :
    Inscription : avril 2005
    Messages : 4 160
    Points : 6 019
    Points
    6 019

    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.
    http://rperrot.developpez.com
    http://phos-graphein.fr

    Vous désirez contribuer à la rubrique algorithmique, n'hésitez pas à me contacter.

  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 : 116
    Points
    116

    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 : 116
    Points
    116

    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(void)
    {
    	printf("test de la commande dir");
    	system("dir");
    	getchar();
    	return 0;
    }
    sa marche parfaitement. encore merci.
    plus qu'a tester avec linux

  8. #8
    Expert Confirmé Sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 509
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 509
    Points : 20 176
    Points
    20 176

    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 : 116
    Points
    116

    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(void)
    {
    	printf("test de la commande dir");
    	system("dir c:\windows\");
    	getchar();
    	return 0;
    }
    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 842
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Afghanistan

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

    Informations forums :
    Inscription : juin 2004
    Messages : 5 842
    Points : 11 523
    Points
    11 523

    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 : 116
    Points
    116

    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 Confirmé Sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 509
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 509
    Points : 20 176
    Points
    20 176

    Par défaut

    Citation Envoyé par Spidermeu
    pourquoi sa ne marche pas ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	system("dir c:/windows");
    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 : 116
    Points
    116

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	system("dir c:/windows");
    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 Confirmé Sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 509
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 509
    Points : 20 176
    Points
    20 176

    Par défaut

    Citation Envoyé par Spidermeu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	system("dir c:/windows");
    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 ("dir \"c:/windows\"");
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Expert Confirmé Sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 771
    Points : 35 839
    Points
    35 839

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

  16. #16
    Expert Confirmé Sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 509
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 509
    Points : 20 176
    Points
    20 176

    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 : 116
    Points
    116

    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(void)
    {
    	char phrase[N];
     
    	printf("la commande dir:\n");
       scanf("%s",phrase);
       system(phrase);
       getchar();
       return 0;
    }
    l'invite de commande disparait directement... est-ce que j'ai le droit d'utiliser phrase comme ca ?

  18. #18
    Expert Confirmé Sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 771
    Points : 35 839
    Points
    35 839

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

  19. #19
    Expert Confirmé Sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 509
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 509
    Points : 20 176
    Points
    20 176

    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 : 116
    Points
    116

    Par défaut

    merci beaucoup pour c'est info