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

GTK+ avec C & C++ Discussion :

system() contre g_spawn_async()


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut system() contre g_spawn_async()
    Bonjour,

    Pour mon interface en GTK+, j'ai besoin d'ouvrir diff�rents programmes "externes". J'ai eu l'occasion de voir que system(), ce n'est pas bien.
    Seulement, le prototype de g_spawn_async() est quelque peu effarant de complexit�.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    g_spawn_async
    (
        const gchar *working_directory,
        gchar **argv,
        gchar **envp,
        GSpawnFlags flags,
        GSpawnChildFunc child_setup,
        gpointer user_data,
        GPid *child_pid,
        GError **error
    )
    Auriez-vous l'amabilit� de m'�clairer sur les diff�rents param�tres avec un exemple ?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    Tu peux trouver la liste des arguments avec une description sur http://library.gnome.org/devel/glib/...#g-spawn-async Certains des arguments sont facultatifs (ie peuvent etre mis � NULL ou 0) si tu n'en as pas l'utilit�

  3. #3
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    Certes oui, mais � quoi correspond "le vecteur d'arguments du processus-enfant" ?
    Quels sont les drapeaux � indiquer ? Dans quel ordre ? Que mettre comme setup quand je veux lancer feh, comme dans l'exemple suivant ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Instruction = concat(3, "feh -F -z -D 2 --filelist '", Nom_Fichier, "' &");
    Entier_Quelconque = system(Instruction);
    (concat �tant une fonction de concat�nation de cha�nes de caract�res)

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    vecteur d'argument, c'est un tableau contenant les arguments � passer � ton programme, c'est la m�me philosophie que le tableau pass� � execv je crois. Le "child_setup", tu ne sais pas ce que c'est, donc je partirais du principe que tu n'en as pas besoin et je la mettrais � NULL.Pour les flags, idem, soit y en a qui te plaisent dans la description, soit tu les mets � 0

  5. #5
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    Les arguments, �a serait "-F -z -D 2 --filelist" ?

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    Plut�t un tableau contenant "-F", "-z", ... Je sais pas s'il faut "-D", "2" ou "-D 2", je me trompe � chaque fois.

  7. #7
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    Bon, ok, une derni�re question : feh, ce sera le working_directory ?

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    Non tu peux probablement le mettre � NULL

  9. #9
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    Bon, bon, bon...

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    Nom_Fichier = "Diaporama.dia"
    Argv[0] = "-F";
    Argv[1] = "-z";
    Argv[2] = "-D 2";
    Argv[3] = "--filelist";
    Argv[4] = Nom_Fichier;
    g_spawn_async("/usr/bin/feh", Argv, NULL, G_SPAWN_CHILD_INHERITS_STDIN, NULL, NULL, NULL, NULL);
    ne fonctionne pas. C'est comme si la ligne n'existait pas.
    Devrais-je plut�t utiliser gdk_spawn_on_screen_with_pipes() ?

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    Tu as effectivement mis le premier argument � NULL comme je te l'ai conseill�, c'est bien. Pour rappel, argv[0] dans un prog en C contient le nom de l'executable.

  11. #11
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    J'ai retest� avec
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    Argv[0] = "feh";
    Argv[1] = "-F";
    Argv[2] = "-z";
    Argv[3] = "-D 2";
    Argv[4] = "--filelist";
    Argv[5] = Nom_Fichier;
    g_spawn_async("/usr/bin/", Argv, NULL, 
        G_SPAWN_CHILD_INHERITS_STDIN, NULL, NULL, NULL, NULL);
    qui ne marche pas plus.

  12. #12
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Bonjour,

    Code : 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
    char *Argv[8];
    GError *error = NULL;
     
    Argv[0] = "feh";
    Argv[1] = "-F";
    Argv[2] = "-z";
    Argv[3] = "-D";
    Argv[4] = "2";
    Argv[5] = "--filelist";
    Argv[6] = Nom_Fichier;
    Argv[7] = NULL;
    if (!g_spawn_async("/usr/bin/", Argv, NULL, 
        G_SPAWN_CHILD_INHERITS_STDIN, NULL, NULL, NULL, &error))
    {
      g_warning (error->message);
    }
    Au moins tu auras plus d'informations si �a ne fonctionne toujours pas.

    Sinon tu peux aussi utiliser g_spawn_command_line_async.

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    Perso j'aurais tendance � commencer par lancer une appli qui ne prend pas d'argument, et une fois que �a marche, j'essaierais d'ajouter les args.

  14. #14
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    Bonjour gege2061,
    Malheureusement, pour ton code, CodeBlocks me r�pond "Implicit declaration of function warning".
    Pour teuf13, je n'ai, pour le moment, pas de programmes � appeler sans arguments.

    Je vais tenter g_spawn_command_line().

  15. #15
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Citation Envoy� par cypher.sephiroth Voir le message
    Malheureusement, pour ton code, CodeBlocks me r�pond "Implicit declaration of function warning".
    g_warning pardon, le but est juste d'afficher un message en cas d'erreur.

  16. #16
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    Sur ton syst�me, t'as probablement un bon nombre d'applis graphiques sous la main gtk-demo par exemple.

  17. #17
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    Citation Envoy� par gege2061 Voir le message
    g_warning pardon, le but est juste d'afficher un message en cas d'erreur.
    Maintenant, il me r�pond que "le format n'est pas une cha�ne litt�rale et pas d'argument de format"
    Accessoirement, g_spawn_command_line_async () fonctionne.

  18. #18
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par d�faut
    C'est pas trop grave comme warning, mets un g_warning ("%s", error->message) pour l'�viter

  19. #19
    Membre confirm�
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Par d�faut
    Bon, ben finalement, les deux techniques marchent. Merci beaucoup.
    Une derni�re question (ensuite, promis, je change de sujet) :
    Laquelle de ces deux m�thodes g_spawn_async() ou g_spawn_command_line() est la plus appropri�e ?

  20. #20
    Mod�rateur

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par d�faut
    EDIT: Ah bin j'avais pas vu la 2�me page, mais mon exemple tient tout de m�me la route pour la cr�ation/destruction du vecteur d'arguments

    agrv fonctionne de la m�me mani�re que dans un main traditionnel dont le prototype est :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int main (int argc, char**argv)
    on voit aussi souvent avec un tableau de chaines de caract�res:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int main (int argc, char*argv[])
    argc est le nombre d'arguments (arguments count), et argv un vecteur d'arguments (arguments vector).
    argv[0] contient le nom de la commande.

    Je te conseille donc de faire un truc du genre (non test�):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    GError *error = NULL;
    gchar command[] = "zenity --info --text='voici un exemple'";
    gchar **command_vector = g_strsplit (command, ' ', 0);
    if (!g_spawn_async (NULL, command_vector, NULL, 
        G_SPAWN_CHILD_INHERITS_STDIN, NULL, NULL, NULL, &error))
    {
      g_warning ("%s", error->message);
    }
     
    /* Suite de ton programme ici */
     
    /* Libère un vecteur de chaines de caractères */
    g_strfreev (command_vector);

Discussions similaires

  1. Arguments pour et contre Access ?
    Par bottura dans le forum Sondages et D�bats
    R�ponses: 240
    Dernier message: 23/03/2018, 23h25
  2. Prot�ger une disquette contre la copie
    Par benzaza dans le forum Assembleur
    R�ponses: 20
    Dernier message: 16/01/2005, 10h42
  3. [VB6] [Système] Récupérer le contenu d'une fenêtre DOS
    Par Nounours666 dans le forum VB 6 et ant�rieur
    R�ponses: 16
    Dernier message: 18/11/2004, 16h38
  4. Algo "Contre l'ordinateur"
    Par Black-Ghost dans le forum Algorithmes et structures de donn�es
    R�ponses: 5
    Dernier message: 15/10/2002, 10h55
  5. [TP7]systeme d'exploitation
    Par numeror dans le forum Turbo Pascal
    R�ponses: 10
    Dernier message: 15/08/2002, 08h47

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