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 :

Fonction system() muette


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    ESEO
    Inscrit en
    Novembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ESEO
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 18
    Par défaut Fonction system() muette
    Bonjour,

    Je suis bloqué sur un petit probleme, je voudrais rendre l'appel à la fonction system() muette.

    Je ne comprends pas pour le moment pourquoi elle est muette que quand elle le veut...

    Voici deux appels, le premier est muet, le second non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /* mise en forme de la commande de supression des regles*/
    sprintf(commande,"iptables -t nat --flush");
    /* envoi de la commande de supression des regles */
    return system(commande);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char commande[SIZE_COMMAND_MAX];
    /* mise en forme de la commande */
    sprintf(commande," sysctl -w net.ipv4.ip_forward=1");
    /* envoi de la commande d'ouverture de la fonction routeur */
    return system(commande);

  2. #2
    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
    Que signifie ton "muette"?

    system provoque uniquement l'appel par le systeme d'une commande. Si celle-ci écrit quelque chose, tant mieux pour elle.
    Certains programmes ont une commande pour ne pas afficher de message.

    En général, tu peux ruser avec une redirection (>/dev/null)

  3. #3
    Membre averti
    Homme Profil pro
    ESEO
    Inscrit en
    Novembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ESEO
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 18
    Par défaut
    La premiere concerne uniquement un changement de valeur, donc je ne veux pas de l'affichage dans le terminal, c'est ça que j'appelle "muette".

    Oui la technique du /dev/null marcherait mais je perdrais dans ce cas aussi mes log

    Je vais regarder au niveau de la commande que j'envoie plutot qu'au niveau de system() pour voir si je peux la mute

  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
    Je pensais à sprintf(commande,"iptables -t nat --flush >/dev/null");.
    D'ailleurs, tu pourrais peut-être directement passer par system("iptables -t nat --flush >/dev/null");

  5. #5
    Membre averti
    Homme Profil pro
    ESEO
    Inscrit en
    Novembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ESEO
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 18
    Par défaut
    Oui mon sprintf est la car je construit des string avec des variables, la j'ai mis une version simplifiée avec une chaine fixe

    Je connaissais pas la syntaxe pour mettre la sortie comme ça merci !

    Finalement j'ai trouvé comment mute cet appel :

    sysctl -w net.ipv4.ip_forward=1

    il faut lui rajouter l'option -q :

    sysctl -q -w net.ipv4.ip_forward=1

    Voila, ça servira peu etre un jour a quelqu'un :p

  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
    Cela dit, je n'ai pas vérifié si la redirection dans la commande fonctionne.
    Dans tous les cas, ce n'est pas portable, mais la commande non plus.

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

Discussions similaires

  1. fonction system et probleme d'arobase
    Par yerome dans le forum Langage
    Réponses: 3
    Dernier message: 08/07/2005, 16h53
  2. Réponses: 10
    Dernier message: 08/02/2005, 16h04
  3. Réponses: 1
    Dernier message: 20/08/2004, 09h16
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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