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

NodeJS Discussion :

Exécuter un bout de code en C


Sujet :

NodeJS

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut Exécuter un bout de code en C
    Bonjour,
    J'aimerais savoir s'il était possible d’exécuter un bout de code en C depuis notre application node js?
    Si oui comment où peut faire?
    Merci d'avance pour vos réponse.

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut créer un shell ou batch qui execute ton code C
    Il faut passer par nodejs et commande line il me semble.

    http://shapeshed.com/command-line-ut...s-with-nodejs/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    J'ai regarder ce que tu ma dit et j'avoue ne pas bien comprendre comment sa fonctionne et ou rentre mon programme en C...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 233
    Points
    233
    Par défaut
    Utilise child_process https://nodejs.org/api/child_process.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var cp = require('child_process');
    cp.exec('ls -la', function(err, stdout, stderr) {  // par exemple un ls, mais tu y met l’exécutable que tu veux
      if (err) throw err;
      if (stderr) console.warn(stderr);
      console.log(stdout);
    });

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    nodeJS supporte l'ajout de module écrits en C++

    fichier hello.cc
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // hello.cc
    #include <node.h>
     
    using namespace v8;
     
    void Method(const FunctionCallbackInfo<Value>& args) {
      Isolate* isolate = Isolate::GetCurrent();
      HandleScope scope(isolate);
      args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
    }
     
    void init(Handle<Object> exports) {
      NODE_SET_METHOD(exports, "hello", Method);
    }
     
    NODE_MODULE(addon, init)

    le descripteur pour indiquer au compilateur comment ler le module C++ à nodeJS
    binding.gyp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
      "targets": [
        {
          "target_name": "addon",
          "sources": [ "hello.cc" ]
        }
      ]
    }
    node-gyp configure pour générer le makefile

    et tu peux l'utiliser ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // hello.js
    var addon = require('./build/Release/addon');
     
    console.log(addon.hello()); // 'world
    tu trouveras la doc sur le site de nodeJS

    A+JYT

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    Merci pour vos réponses, xulien je connais child processus mais j'aurais voulu quelque chose de plus intégrée si possible.
    Sekaijin ta solution me parait pas mal mais je connais pas le C++ , il n'y a pas moyen de faire la même chose mais en C?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    Enfaite-je n'ai pas moyen de lancer un exécutable en lui mettant des paramètres en entrée? Pour ne pas à avoir à compiler à chaque fois mon programme pour que ça soit plus rapide?
    Je sais pas si je suis très claire...

  8. #8
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    nodeJS s'appuis sur le moteur V8
    et V8 est écrit en C++
    tu trouveras la doc ici
    http://izs.me/v8-docs/hierarchy.html
    https://developers.google.com/v8/

    https://nodejs.org/api/addons.html

    le problème c'est js est un langage à objet et V8 est lui écrit avec un langage à objet
    difficile de faire une API avec un langage qui ne supporte pas la notion d'objet.

    A+JYT

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    D'accord merci pour ta réponse j'hésite entre utiliser ta solution ou celle du child.process.Exec File(file[, args][, options][, callback]) qui me permettrai d’exécuter un .exe de mon programme en C avec des paramètres d'entrée si c'est bien compris. Tu me conseillerais quelle solution?

  10. #10
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    tout dépends de tes capacité à faire du C++

    si tu te sent de te lancer c'est plus propre et plus efficace
    tu peux ajouter les fonction et objet de ton choix à ton moteur js

    mais si tu ne maîtrise pas un peu exec est plus abordable moins interactions entre le c et js mais plus simple

    A+JYT

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    D'accord bah je pense que je vais commencer par exec et je verrai plus tard pour faire par ta méthode vue que je vais avoir des cours de C++ l'année prochaine.
    Juste une dernière question avec exec je peux bien envoyer des paramètres à mon programme grâce à child.process.Exec.File(file[, args][, options][, callback])? Et est-il possible d'avoir un retour de mon programme quand l'exécutable a fini, pour récupérer une ou deux valeurs?

  12. #12
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Non

    du moins pas en retour de l'exécution
    nodeJS fonctionne par callback

    tu exécute child.process.Exec.File(....) et ça ne te retourne rien

    par contre tu peux passer en paramètre un callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    child.process.Exec.File(.... function(error, stdout , stderr) {
     // ici error contient le code retour de l'exécution
     // stdout contient ce que l'exécution à produi tvers stdout 
     // stderr contient ce que l'exécution à produi tvers stderr
    });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    child.process.exec("echo", "hello world", function(error, stdout , stderr) {
     // ici error : 0
     // stdout : hello world
     // stderr :
    });
    A+JYT

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    D'accord merci, j'en ai pas vraiment besoin du retour donc ce n'est pas si grave.
    Donc si j'ai bien compris je lance mon exécutable C avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    child.process.exec('NomDeMonExe.exe', "Paramètre1", function(error, stdout , stderr) {
    //Cette fonction est exécuter a la fin de mon exe
    });
    Mais dans mon Code en C comment je fais pour récupérer mon paramètre1 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Void main(char Parametre1)
    {
    //Mon code...
     
    }
    Comme ça?

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main ( int argc, char* argv[] )
    {
     
        return 0;
    }
    Je n'ai pas encore essayé mais je pense que c'est comme ça, je connaissais pas.
    Petit question le stderr correspond a quoi dans la fonction de retour?
    Merci

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 233
    Points
    233
    Par défaut
    le stderr correspond a quoi dans la fonction de retour?
    error > gestionnaire de node
    sdtout > retour de la sortie de ton exe
    sdterr > retour erreur de ton exe

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    Ah ouais d'accord merci^^
    donc si je met un Je peut le récupérer avec sdtout ou rien avoir?

  17. #17
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    non
    pas de return dans un exe en C
    le main peut faire
    exit 0
    exit 1
    etc.
    c'est le code retour de l'exe

    pour écrire sur stdout il faut utiliser les fonctions stdio comme printf
    de même tu peux écrire sur stderr

    l'équivalent du echo en shell

    A+JYT

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    D'accord merci pour vos réponses. Je vais commencer à programmer pour voir.

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 82
    Points : 34
    Points
    34
    Par défaut
    J'ai essayé j'ai compris pour le stdout que c'est ce qui est afficher sur la console normalement avec les printf, mais pour le stderr je comprend pas comment écrire dedans...?

  20. #20
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(stderr, "Hello World ");

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Lancer un bout de code en permanence à l'exécution d'un programme
    Par kurt225 dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/03/2014, 12h08
  2. exécution périodique d'un bout de code
    Par ramijrad dans le forum Langage
    Réponses: 3
    Dernier message: 02/12/2010, 22h49
  3. Exécuter un bout de code seulement si compilé en 32-bit
    Par pasqual dans le forum Visual Studio
    Réponses: 4
    Dernier message: 31/03/2010, 13h23
  4. Mesurer le temps d'exécution d'un bout de code
    Par Floréal dans le forum C++
    Réponses: 4
    Dernier message: 06/04/2007, 09h46
  5. [C# 2.0] Exécution d'un bout de code lors de l'installation
    Par oodini dans le forum Windows Forms
    Réponses: 6
    Dernier message: 11/09/2006, 16h27

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