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 :

fork() dans une fonction appelant une autre fonction !


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut fork() dans une fonction appelant une autre fonction !
    Bonjour, je suis en train de développez un petit programme pour m’entraîner a la programmation système sur linux, j'ai donc crée plusieurs fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int etat_barriere(int name);
    int etat_feux_tricolore(int name);
    void postionner_barrier(int name, int position);
    void eclairer_feux_tricolore(int name, int couleur);
    et j'ai crée une fonction "nouveau_process(void (*fonction) (void))" destiné a crée un processus pour la fonction passé en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int nouveau_process(void (*fonction)(void)){
     
    pid_t processus;
    processus = fork();
     
    if (processus == -1) { 
    return 0;
    }
    else if (processus != 0) { 
    return(fonction);
    }
    }
    ainsi après je pensais pouvoir lancer une de mes 4 fonctions dans un nouveau processus en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveau_process(eclairer_feux_tricolore(23, 1))
    Mais a la compilation j'obtient : utilisation invalide d'expression void

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Ta fonction a en paramètre un pointeur de fonction avec un prototype bien défini : void fonction (void * data)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int nouveau_process(void (*fonction)(void *data), void *data);
    Toutes les fonctions que tu passe par adresse en paramètre à nouveau_process doivent avoir le prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void fonction (void * data);
    Pour utiliser tes deux int, tu dois donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef struct
    {
           int x;
           int y;
    }Int2;
     
    //dans ton code :
    Int2 machin = {15,58};
    nouveau_process(&fonction, (void *)&machin);
     
    //dans ta fonction lancée par nouveau_process :
    Int2 machin = *(Int *)data;

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Mais si je fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveau_process(&fonction, (void *)&machin);
    je vais crée un nouveau processus pour ma fonction passer en paramètre de nouveau_process, donc de ce fait il ne me prendra pas mess variables dans le processus fils, il faut dans ce cas que j'utilise les IPC V du style Tubes pour transmettre les paramètre de la fonction ?

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    else if (processus != 0) { 
    return(fonction);
    }
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    else if (processus != 0) { 
    return  (*fonction)(machin);
    }

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    merci

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 14
    Dernier message: 10/09/2009, 19h08
  4. Réponses: 2
    Dernier message: 31/08/2005, 16h12

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