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

POSIX C Discussion :

Pas de fork sous Windows?


Sujet :

POSIX C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41

    Informations forums :
    Inscription : mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut Pas de fork sous Windows?
    Apparement, mais j'espère fort me tromper, fork() n'existe pas sous Windows et c'est une fois de plus fort dommage!
    G trouvé deux fonctions "Windows" : CreateProcess et CreateThread.
    Le pb est qu'elles ne m'ont pas l'air de faire exactement comme fork(), c'est à dire une copie du process parent en conservant les variables et s'exécutant à partir de l'endroit d'appel.

    Si vous pouviez me contredire sur l'existence de fork, ou me dire quoi utilisez pour m'en rapprochez, je vous en serait reconnaissant.

    JM

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2002
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 136
    Points : 598
    Points
    598
    Par défaut
    hé bien malheureusement, il ne va pas être possible de te contredire
    En effet, sous windows tu n'as que les deux fonctions que tu site et qui comme tu l'as très bien remarqué ne font pas une copie du process parent mais exécute un exe dans le cas de CreateProcess ou une fonction pour CreateThread.
    Cependant, on peut se rendre compte que ce qui se fait avec un fork, pet souvent se réaliser avec unthread alors tu devrais pouvoir trouver un moyen de contourner les difficultés

  3. #3
    Nouveau membre du Club
    Inscrit en
    avril 2002
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 23
    Points : 35
    Points
    35
    Par défaut
    Jusqu'à présent j'ai toujours utilisé CreateProcess pour lancer une autre application et CreateThread pour gérer plusieurs tâches en lieu et place d'un fork.

    A mon avis il faut revoir toute l'architecture de ton logiciel et l'adapter à Windows sachant qu'il y a pas mal de différences entre fork et CreateThread.

    fork duplique la zone data pour chaque process alors que CreateThread partage l'ensemble des données entre les différents thread rattaché à ton process.

    J'ai entendu dire que sous NT il y avait un kit de développement spécial pour porter facilement des applis UNIX. Si quelqu'un pouvait rappeler le nom de ce produit ça faciliterait la vie à JM.

    Une petit idée quand même si tu dois gérer un code multiplateforme (sinon oublie tout ça et adapte toi aux paricularités windows) :
    - mettre toutes les variables globales dans une structure (s_global par ex)
    - déclarer un tableau s_global g[1] si UNIX et g[2] si Windows,
    - si unix accéder à g[0] quel que soit le process (père ou fils),
    - si windows copier g[0] dans g[1] (pour simuler la duplication des datas) et accéder à g[0] dans le thread principal et g[1] pour le thread annexe,
    - augmenter la taille du tableau si plus de 2 threads.

    J'espère que ca pourra t'aider.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41

    Informations forums :
    Inscription : mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Bon, et est-ce qu'il y a moyen de partager un sémaphore mutex entre plusieurs threads crées par CreateThread?
    C à peu près tout ce que j'attends de mes process fils.

  5. #5
    Membre régulier
    Avatar de Tifauv'
    Profil pro
    Inscrit en
    mars 2002
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 102
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Miko
    J'ai entendu dire que sous NT il y avait un kit de développement spécial pour porter facilement des applis UNIX. Si quelqu'un pouvait rappeler le nom de ce produit ça faciliterait la vie à JM.
    Ca ne serait pas Cygwin ?
    - Un pointeur, c'est comme un fusil chargé mal reglé avec la gachette qui s'appuie toute seule des fois.
    - Nan nan nan ça c'est le C. Un pointeur, c'est la même chose, mais avec le Quad Damage.

  6. #6
    Nouveau membre du Club
    Inscrit en
    avril 2002
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 23
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Tifauv'
    Ca ne serait pas Cygwin ?
    Non du tout, c'est un produit purement de chez M$.

    Et pour répondre à JM, voici le prototype de CreateMutex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HANDLE CreateMutex(
     
        LPSECURITY_ATTRIBUTES  lpMutexAttributes,	// address of security attributes 
        BOOL  bInitialOwner,	// flag for initial ownership 
        LPCTSTR  lpName 	// address of mutex-object name  
       );
    Il suffit d'initialiser lpName à la même valeur.

  7. #7
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2002
    Messages : 131
    Points : 160
    Points
    160
    Par défaut NT4
    Sous NT 4 il existe un "sous-systeme" a la norme Posix (1.2 je crois (sans garantie).

    C'est a dire qu'une appli ne faisant appel QU'A des fnc posix pourra etre recompilé avec un compilo style gcc et tourner sur nt4.

    Je ne sais pas si 2000 supporte ce sous-systeme

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41

    Informations forums :
    Inscription : mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Miko
    Il suffit d'initialiser lpName à la même valeur.
    A la même valeur que quoi?

  9. #9
    Nouveau membre du Club
    Inscrit en
    avril 2002
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 23
    Points : 35
    Points
    35
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hMutex = CreateMutex(NULL, FALSE, "MonMutex");
    WaitForSingleObject(hMutex, INFINITE);
    Et ce dans chacun des threads qui ont besoin du mutex.

    Il est possible d'utiliser un timeout exprimé en millisec à la place de INFINITE.

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

Discussions similaires

  1. fork sous windows
    Par Hisoka_Hunter dans le forum C++
    Réponses: 2
    Dernier message: 01/02/2008, 18h49
  2. [Système] Fork sous Windows ??
    Par haffouff dans le forum Langage
    Réponses: 3
    Dernier message: 25/05/2006, 12h35
  3. [Mac] Lien ne fonctionnant pas mais ok sous Windows
    Par bractar dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 26/01/2006, 18h38
  4. simuler un fork sous windows VC++
    Par pascal13 dans le forum Windows
    Réponses: 5
    Dernier message: 03/01/2006, 11h33
  5. socket et fork() sous Windows avec Cygwin
    Par Djakisback dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 20/12/2005, 00h33

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