Publicité
+ 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 : 107
    Points
    107

    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 483
    Points
    1 483

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

    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
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2003
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2003
    Messages : 8 526
    Points : 23 569
    Points
    23 569

    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
    Modérateur
    Avatar de PRomu@ld
    Homme Profil pro Romuald Perrot
    Ingénieur de Recherche
    Inscrit en
    avril 2005
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Nom : Homme Romuald Perrot
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : avril 2005
    Messages : 4 160
    Points : 5 585
    Points
    5 585

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

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

    Par défaut

    j'ai testé la commande dir :

    Code :
    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
    Rédacteur
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 507
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 507
    Points : 18 091
    Points
    18 091

    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

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

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

    Par défaut

    ok, mais si je fais ca par exemple :

    Code :
    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
    Inscrit en
    juin 2004
    Messages
    5 845
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations forums :
    Inscription : juin 2004
    Messages : 5 845
    Points : 9 970
    Points
    9 970

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

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

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 507
    Points : 18 091
    Points
    18 091

    Par défaut

    Citation Envoyé par Spidermeu
    pourquoi sa ne marche pas ??
    Code :
    	system("dir c:/windows");
    Pas de Wi-Fi à la maison : CPL

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

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

    Par défaut

    Code :
    	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
    Rédacteur
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 507
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 507
    Points : 18 091
    Points
    18 091

    Par défaut

    Citation Envoyé par Spidermeu
    Code :
    	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 :
    system ("dir \"c:/windows\"");
    Pas de Wi-Fi à la maison : CPL

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

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

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 23 813
    Points : 31 652
    Points
    31 652

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

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 507
    Points : 18 091
    Points
    18 091

    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

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

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

    Par défaut

    et une autre petite question...( décidement)...

    Quand je saisie ce code :

    Code :
    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
    23 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 23 813
    Points : 31 652
    Points
    31 652

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

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 507
    Points : 18 091
    Points
    18 091

    Par défaut

    Citation Envoyé par Spidermeu
    Code :
    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

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

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

    Par défaut

    merci beaucoup pour c'est info

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •