Précédent   Forum du club des développeurs et IT Pro > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q. C, Avant de poster.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/02/2006, 12h12   #1
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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.
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 12h21   #2
DaZumba
Membre Expert
 
Inscription : 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
system() de stdlib.h avec une chaine de commande construite par sprintf() de stdio.h.
DaZumba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 12h27   #3
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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 ?
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 13h04   #4
Anomaly
Responsable technique

 
Avatar de Anomaly
 
Homme
Administrateur systèmes et développeur Web
Inscription : juin 2003
Messages : 8 029
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Administrateur systèmes et développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2003
Messages : 8 029
Points : 22 144
Points : 22 144
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
Anomaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 13h12   #5
PRomu@ld
Responsable Algorithmes
 
Avatar de PRomu@ld
 
Homme Romuald Perrot
Attaché Temporaire d'Enseignement et de Recherche (ATER)
Inscription : avril 2005
Messages : 4 146
Détails du profil
Informations personnelles :
Nom : Homme Romuald Perrot
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Attaché Temporaire d'Enseignement et de Recherche (ATER)
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 4 146
Points : 6 195
Points : 6 195
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.
PRomu@ld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 14h27   #6
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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 ?
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 15h32   #7
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 15h33   #8
Emmanuel Delahaye
Rédacteur
 
Avatar de Emmanuel Delahaye
 
Inscription : décembre 2003
Messages : 14 505
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 14 505
Points : 19 412
Points : 19 412
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
Emmanuel Delahaye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 18h14   #9
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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 ??
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 18h16   #10
gege2061
Rédacteur
 
Avatar de gege2061
 
Inscription : juin 2004
Messages : 5 850
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : juin 2004
Messages : 5 850
Points : 11 060
Points : 11 060
Bonjour,

Citation:
Envoyé par Spidermeu
pourquoi sa ne marche pas ??
pourquoi ça ne marche pas, tu as un message d'erreur ?
__________________
gege2061's blog
gege2061 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 18h37   #11
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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)
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 18h56   #12
Emmanuel Delahaye
Rédacteur
 
Avatar de Emmanuel Delahaye
 
Inscription : décembre 2003
Messages : 14 505
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 14 505
Points : 19 412
Points : 19 412
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
Emmanuel Delahaye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 18h59   #13
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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\\
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 19h15   #14
Emmanuel Delahaye
Rédacteur
 
Avatar de Emmanuel Delahaye
 
Inscription : décembre 2003
Messages : 14 505
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 14 505
Points : 19 412
Points : 19 412
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
Emmanuel Delahaye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 19h18   #15
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 490
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 22 490
Points : 32 264
Points : 32 264
Envoyer un message via MSN à 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 "/"...
Médinoc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 19h19   #16
Emmanuel Delahaye
Rédacteur
 
Avatar de Emmanuel Delahaye
 
Inscription : décembre 2003
Messages : 14 505
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 14 505
Points : 19 412
Points : 19 412
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
Emmanuel Delahaye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 19h30   #17
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
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 ?
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 22h42   #18
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 490
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 22 490
Points : 32 264
Points : 32 264
Envoyer un message via MSN à Médinoc
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().
Médinoc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2006, 22h58   #19
Emmanuel Delahaye
Rédacteur
 
Avatar de Emmanuel Delahaye
 
Inscription : décembre 2003
Messages : 14 505
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 14 505
Points : 19 412
Points : 19 412
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

Citation:
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
Emmanuel Delahaye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2006, 03h07   #20
Spidermeu
Membre habitué
 
Avatar de Spidermeu
 
Homme
Ingénieur systèmes et réseaux
Inscription : 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 : 118
Points : 118
merci beaucoup pour c'est info
Spidermeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h57.


 
 
 
 
Partenaires

Hébergement Web