Bonjour, :)
Je rencontre un problème pour exécuter la commande suivante :
Le fichier liste_ps.txt est vide.Code:system("AINTX\\ps.exe > liste_ps.txt")
Pourtant la commande s'exécute sans pb en ligne de commande.
Avez-vous une idée ? Merci.
Version imprimable
Bonjour, :)
Je rencontre un problème pour exécuter la commande suivante :
Le fichier liste_ps.txt est vide.Code:system("AINTX\\ps.exe > liste_ps.txt")
Pourtant la commande s'exécute sans pb en ligne de commande.
Avez-vous une idée ? Merci.
Es-tu sûr que cette commande affiche sur la sortie standard et non la sortie erreur?Citation:
Envoyé par licorne
Je ne pense pas que tu peux rediriger la sortie erreur sous windows (quoique) mais sous linux, il faut utiliser 2> à la place de >.
[EDIT]
D'ailleurs où est le rapport avec le langage C?
[/EDIT]
Jc
En fait ma ligne de code entière est la suivante :
Lors de l'exécution en lançant mon prog en ligne de commande il passe bien sur ce test, exécute "system("AINTX\\ps.exe") " et liste les process à l'écran. Puis crée le fichier liste_ps.txt avec "system("AINTX\\ps.exe > liste_ps.txt")" mais vide.Code:if (system("AINTX\\ps.exe") == 0 && system("AINTX\\ps.exe > liste_ps.txt") == 0)
La seule possibilité que j'ai trouvé pour tester une erreur éventuelle est le code retour de "system == 0".
Voici l'explication du pb :
Après la commande qui liste les process vers un fichier txt, j'ouvre le fichier txt en question.
Il faut juste insérer une temporisation après la création du fichier txt.
Et maintenant ça fonctionne. :wink:Code:
1
2
3
4
5
6
7
8
9 if (system("AINTX\\ps.exe") == 0 && system("AINTX\\ps.exe > liste_ps.txt") == 0) { sleep(5000); if ((fichierps = fopen("liste_ps.txt","wb")) == NULL) { fputs("\nErreur d'ouverture du fichier liste_ps.txt\r",cr); return 1; }
Une autre question à ce sujet : comment savoir si lexécution d'une commande est terminée ?
A ma connaissance, c'est automatique. Avec system(), le processus appelant est suspendu jusqu'à execution du processus appelé. Je suis un pei étonné par l'ajout du 'sleep()'...Citation:
Envoyé par licorne
Tu veux dire que ma commande "system("AINTX\\ps.exe > liste_ps.txt")"Citation:
Envoyé par Emmanuel Delahaye
est réellement terminée quand system rend la main.
Oui, mais j'ai un doute. J'étudie la norme...Citation:
Envoyé par licorne
Effectivement, ce n'est pas précisé. Ca doit dépendre de l'implémentation. Il faut que tu regardes la définition de system() sur ta machine (man 3 system)Citation:
Envoyé par N1124
Alors là j'avoue que je ne sais pas comment faire pour regarder la définition de system(). Peux-tu m'en dire plus ?
Quel est ton système ?Citation:
Envoyé par licorne
Windows Server 2003 Standard Edition.
MSDN ???Citation:
Envoyé par licorne
Et ton compilateur ?Citation:
Envoyé par licorne
Si tu utilise VC
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_crt_system.2c_._wsystem.asp
MingW.Citation:
Envoyé par Emmanuel Delahaye
Là, ça pose un véritable problème. Il s'agit maintenant de savoir si mingw utilise ses propres fonctions ou celles de windows sur ce système.Citation:
Envoyé par licorne
Peut être faudrait-il consulter le forum C de mingw...
http://sourceforge.net/forum/forum.php?forum_id=286529
Merci pour l'info et bon après-midi. :wink:Citation:
Envoyé par Emmanuel Delahaye