fork(), wait(), exec() et autres sous Win? - C - Programmation
Marsh Posté le 19-10-2006 à 04:03:04
Salut,
Je ne connais pas du tout la prog Linux donc je vais peut être dire une connerie mais il me semble qu'il n'existe pas d'équivalent de ces fonctions sous windows.
Tu vas devoir utiliser les apis de manipulation de processus et de thread :
http://windowssdk.msdn.microsoft.c [...] S.80).aspx
Sinon la question avait déjà été posée ici : http://forum.hardware.fr/hardwaref [...] 2606-1.htm
Marsh Posté le 19-10-2006 à 04:03:25
2 approches à considérer:
a) Cygwin et sa couche d'émulation
b) faire de même que les autochtones et se coltiner avec Win32
Si a) est simple d'emploi on est coincé avec le CRT & co cygwin, donc gcc, et ce n'est pas optimal.
Dans le 2ième cas de figure, attendu que dans le joyeux monde des fenetres la sémantique des threads - et des IPC - n'a rien à voir, il va vous falloir genereusement emballer le tout.
google: CreateProcess, CreateFileMapping, MapViewOfFile, CreateThread, CreateSemaphore, WaitForSingleObject, WaitForMultipleObjects etc...
Marsh Posté le 19-10-2006 à 04:16:25
a)Cig, c'est sympa, mais ça reste une solution "partielle"... a ce moment la, autant rebooter sous ma gentoo, pis coder normalement avec kwrite et gcc...
b) Donc, ça serait la solution que je devrais employer... mais j'ai vu la tete des trucs, ça a l'air nettement moins simple que ce bon vieux fork... et pour faire une fonction generique qui appelle un fork sous linux ou la fonction qui va bien sous win, ça m'a l'air mal barré
ça vous parrait réalisable de faire ce genre de fonction generique et ensuite faire un code portable?
j'ai un peu l'impression que je risque d'etre obligé de faire deux codes differents, un pour chaque systeme, si je veux aller par la...
CreateProcess, il prend 10 arguments :| et aucun n'est un type de données basique
foulala, ça a l'air assez affreux la prog windows...
En tous cas, merci de l'aide, des liens, des explications, toussa
Marsh Posté le 19-10-2006 à 04:50:17
Tout dépend de votre cahier des charges.
Si c'est de produire une abstraction du modèle fork typiquement *nix pour un portage minimal, c'est certes possible. Mais fatalement innéficace.
Si vous avez des contraintes de performance alors vous vous devrez de taper plus haut, du fait de divergences fondamentales (et pas seulement dans le nombre d'arguments nécessaire à la création d'un processus).
J'ai oublié de mentionner OpenMP. Si par chance celà colle à vos besoins, n'hésitez pas; gcc 4.2, qui ne devrait plus tarder à sortir, le fournit en standard pour le C, C++, Fortran etc... ce sur toutes les platformes. Et c'est aussi disponible avec MSVC 8 et ICC 9.
Marsh Posté le 19-10-2006 à 05:14:43
en fait, je n'ai pas de cahier des charges precis, ni de besoin "pressant" d'utiliser ces fonctions, c'est a titre d'apprentissage...
Et si je peux réussir a faire une petite abstraction de l'OS a ce niveau, je m'en servirai pour des petites choses, comme une interface (afficher quelquechose dans le shell tout en "ecoutant" le clavier pour attendre une action de l'utilisateur : exemple simple, afficher des resultats successifs a l'ecran, en ayant la possibilité d'appuyer sur une touche pour mettre en pause...)
Apres, pour ce qui est de faire de gros projets serieux, il est peu probable que je tente le coup en C...
Je suppose en outre que si je dois faire une utilisation intensive de telles fonctions, il est fortement preferable d'optimiser le résultat en collant au mieux aux specifications du systeme...
En tous cas merci pour tous ces conseils, liens, recommandations
Marsh Posté le 19-10-2006 à 03:16:27
Bonjour à tous.
Je ne suis pas toujours sous linux, donc,je code aussi sous win.
Sauf que la je suis bien embete : j'ai besoin de fonctions de unistd.h
qui forcement ne vont pas fonctionner sous windows...
Pourriez vous m'indiquer des tutos sur la façon de faire l'equivalent de
fork et wait sous windows? que je me fasse un petit .h avec des
bidules de compilations conditionnelle pour appeller les bonnes fonctions
sous win...
(ou meme juste le nom des fonctions, la je googleise depuis un moment,
mais je trouve rien... Dois pas avoir les bons mots clés)