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 :

Commande Linux dans un code C


Sujet :

C

  1. #1
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut Commande Linux dans un code C
    Bonjour,

    Voici ma commande Linux que j'aimerais bien exécuter dans un code C:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    criu dump -R -D img4 -t 19538 -vvv -o dump.log && echo OK
     
    19538 pid process
    J'ai commencé à écrire quelques lignes de code en C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int nb= getpid();
    char * s= "criu dump -R -D img -t 19538 -vvv -o dump.log && echo OK";
    system(s);
    Ma question comment intégrer nb dans la commande au lieu de 19538, avez-vous une idée sur une solution ?



    Merci d'avance.
    Cordialement.

  2. #2
    Membre chevronné
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Par défaut
    Si ton problème est d'intégrer un nombre dans une chaîne C, tu peux le faire avec sprintf, par exemple comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(void)
    {
        int nb = 19538;
        char s[BUFSIZ];
     
        sprintf(s, "criu dump -R -D img -t %d -vvv -o dump.log && echo OK", nb);
        printf("La commande à exécuter est :\n\n%s\n", s);                                                 
     
        return 0;
    }

    Eks

  3. #3
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut
    Il fait la concaténation mais ma commande génère des fichiers output.. je l'ai pas trouvé dans le dossier imag

    Avez-vous une idée ?

    Merci d'avance.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    a priori, c'est ta commande qui est erronée.

    Cela dit, je ne recommande pas l'appel à system.
    Le plus souvent, les applications sont construites autour d'une bibliothèque, qu'il vaut mieux utiliser.

    Regarde la page officielle de l'API C de CRIU

  5. #5
    Membre chevronné
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Par défaut
    Citation Envoyé par chercheur111 Voir le message
    Avez-vous une idée ?
    heu... rajouter :

    ?

    Je voulais juste te montrer comment fonctionne sprintf, qui répond à ta question "comment intégrer nb dans la commande au lieu de 19538, avez-vous une idée sur une solution ?" en insérant la bonne valeur dans ce qui est affecté à s.

    A toi d'en intégrer le fonctionnement à ton programme, dont je ne connais rien.


    Eks

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est pas faux non plus...

  7. #7
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut
    OK, merci pour le lien, je vais voir.

    Cordialement.

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser execve qui est fait pour ça

  9. #9
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Par défaut
    Citation Envoyé par jouana Voir le message
    Pourquoi ne pas utiliser execve qui est fait pour ça
    Parce que quand on veut lancer une simple commande comme celle-ci, un execve() qui implique au moins un fork() et un wait() c'est une prise de tête inutile.

  10. #10
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    De mémoire le fork + le pipe c'est pour gérer le retour de la commande maintenant tu n'es pas obliger de mettre ça en place

  11. #11
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Par défaut
    J'ai jamais parlé de pipe.
    Si tu fork() pas, le programme appelant est écrasé et remplacé par son fils. On a pas tous les détails du projet mais je doute que ce soit ce qui est recherché ici.
    Et si tu wait() pas, le parent va s'exécuter en parallèle avec le fils, or vu la gueule de la commande je pense qu'on veut attendre qu'elle soit entièrement exécutée avant de continuer.

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

Discussions similaires

  1. Commande linux dans un code java
    Par chercheur111 dans le forum Général Java
    Réponses: 1
    Dernier message: 29/04/2012, 18h07
  2. Commande linux dans un code C
    Par chercheur111 dans le forum Linux
    Réponses: 10
    Dernier message: 24/03/2012, 19h52
  3. Réponses: 7
    Dernier message: 09/11/2010, 18h00
  4. [Système] Commande Linux dans Programme PHP
    Par makohsarah dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2007, 12h36
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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