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 habitué 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
    Points : 163
    Points
    163
    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.
    La science ne connaît qu'une loi: la contribution scientifique.

  2. #2
    Membre averti
    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
    Points : 411
    Points
    411
    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 habitué 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
    Points : 163
    Points
    163
    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.
    La science ne connaît qu'une loi: la contribution scientifique.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    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
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre averti
    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
    Points : 411
    Points
    411
    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 sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    C'est pas faux non plus...
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre habitué 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
    Points : 163
    Points
    163
    Par défaut
    OK, merci pour le lien, je vais voir.

    Cordialement.
    La science ne connaît qu'une loi: la contribution scientifique.

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

    Informations professionnelles :
    Activité : Développeur informatique

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

    Pourquoi ne pas utiliser execve qui est fait pour ça

  9. #9
    Membre éprouvé
    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
    Points : 1 211
    Points
    1 211
    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 éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    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 éprouvé
    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
    Points : 1 211
    Points
    1 211
    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