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 :

Ajout d'une commande système à un plugin ?


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 57
    Points
    57
    Par défaut Ajout d'une commande système à un plugin ?
    Bonjour,

    J'essaie d'ajouter à un plugin (C++ sous Linux) une commande système
    destinée à visualiser le démarrage d'un processus interne. Lancement d'une
    commande système pour créer un fichier "BIDON". => "touch /video0/BIDON"

    Bien que cela paraisse trivial, impossible de compiler correctement. Voici les détails :

    Ajout au fichier.c original :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <stdlib.h> 
    ...
    ...
    // Crée un fichier BIDON
    std::system( "touch /video0/BIDON" );
    Résultat de la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    error: expected identifier before string constant
    error: expected ',' or '...' before string constant
    error: ISO C++ forbids declaration of 'system' with no type
    error: invalid use of '::'
    J'ai essayé en modifiant la directive include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <cstdlib>
    mais cela ne change rien.

    Pourriez-vous m'aider à solutionner le problème ?
    D'avance merci.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    pourquoi tu utilises std::
    cette function vient du C et ne fait pas partie de la library standard ....

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par epsilon68
    pourquoi tu utilises std::
    cette function vient du C et ne fait pas partie de la library standard ....
    Simplement parce que j'ai trouvé l'info dans la FAQ.
    Utiliser une autre librairie ne me pose aucun souci.

    Quelle librairie standard puis-je utiliser, et comment ?
    Débutant en C++, je n'ai encore pas trouvé mes marques...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    cette function vient du C mais tu peux l'utiliser,
    elle ne fait simplement pas partie du namespace std (standard) du C++

    sinon je te conseille Qt comme librairie.
    www.trolltech.com

    voila a+

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Cette fonction fait bien parti de la SL.

    Utiliser cstdlib est censé importer les déclarations de stdlib.h dans std::.
    Le fait que std::system soit refusé avec l'utilsation de cstdlib me parait bizarre. Au pire, tu peux toujours te passer de l'espace de noms std et utiliser stdlib.h

    Et je ne vois pas ce que QT va apporter ici.

    NB: Si c'est juste pour faire un touch à vocation de créer un fichier vide, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {std::ostream f("/nom/du/fichier");}
    suffit amplement. Chose qui contrairement au touch sera portable.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par Luc Hermitte
    Et je ne vois pas ce que QT va apporter ici.
    Qt est une tres bonne librarie portable que je conseille volontiers,
    peut-etre pas specifiquement pour appeler "system" mais tres pratique quand on veut lancer un autre process et recuperer le flux de celui-ci, et caetera ...

    en fait cette librairie fait beaucoup de choses et evite bien souvent de reinventer la roue (QString? QStringList? et caetera...)

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Luc Hermitte
    NB: Si c'est juste pour faire un touch à vocation de créer un fichier vide, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {std::ostream f("/nom/du/fichier");}
    suffit amplement. Chose qui contrairement au touch sera portable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {std::ofstream f("/nom/fu/fichier", std::ios_base::out | std::ios_base::app);}
    ne détruit pas un fichier existant.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Luc Hermitte
    ...
    NB: Si c'est juste pour faire un touch à vocation de créer un fichier vide, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {std::ostream f("/nom/du/fichier");}
    suffit amplement. Chose qui contrairement au touch sera portable.
    Je m'oriente sur cette solution qui est simple et qui correspond largement à mon besoin.
    J'ai ajouté ceci en tête de fichier.c :
    puis ceci à l'endroit ou je veux déclencher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::ostream f ("BIDON");
    Mais j'ai encore des soucis de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error: expected identifier before string constant
    error: expected ',' or '...' before string constant

    Je précise que si j'enlève mes 2 lignes de code, la compilation se passe sans erreur.

    Ai-je loupé quelque chose ?

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {std::ofstream f("/nom/fu/fichier", std::ios_base::out | std::ios_base::app);}
    ne détruit pas un fichier existant.

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par epsilon68
    Qt est une tres bonne librarie portable que je conseille volontiers,
    On a vu ça. Mais là, elle n'apporte rien pour la question de l'OP.
    On ne va pas refaire le débat sur la pertinence générale de QT. 1- déjà débattu. 2- HS ici.

    Citation Envoyé par OP
    Ai-je loupé quelque chose ?
    Oui, c'est ma faute. Jean-Marc a montré la correction (plus les options pour faire comme touch avec les fichiers qui existent déjà). Et ce n'est pas <iostream> qui faut inclure, mais <fstream>.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 80
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Luc Hermitte
    Oui, c'est ma faute. Jean-Marc a montré la correction (plus les options pour faire comme touch avec les fichiers qui existent déjà). Et ce n'est pas <iostream> qui faut inclure, mais <fstream>.
    Très bien. J'ai donc réssayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <fstream> // (en tête de fichier)
    ...
    d(printf("TEST !!! *****\n"));
    std::ostream f ("/video0/TEST");
    ...
    Cela ne compile pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /usr/lib/gcc/i586-mandriva-linux-gnu/4.0.1/../../../../include/c++/4.0.1/ostream:106: note:                 std::basic_ostream<_CharT, _Traits>::basic_ostream(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/lib/gcc/i586-mandriva-linux-gnu/4.0.1/../../../../include/c++/4.0.1/iosfwd:64: note:                 std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)
     Erreur 1
    En revanche, ceci fonctionne parfaitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <stdlib.h>    //(en tête de fichier)
    ...
    //d(printf("***** TEST !!! *****\n"))
    (void) system("touch /video0/TEST"); 
    ...
    Ce qui me permet de passer le post en "résolu".
    Merci pour votre aide.

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    J'esère que ça suffira cette fois.

    Citation Envoyé par Jean-Marc.Bourguet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {std::ofstream f("/nom/fu/fichier", std::ios_base::out | std::ios_base::app);}
    ne détruit pas un fichier existant.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/07/2010, 15h55
  2. Lancer une commande système avec VC++
    Par xs_nady dans le forum MFC
    Réponses: 1
    Dernier message: 17/03/2006, 14h03
  3. Réponses: 2
    Dernier message: 02/01/2006, 10h39
  4. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11
  5. [Process] éxecution d'une commande système
    Par alex'l dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/09/2005, 17h29

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