fork et unistd.h sous windows - C - Programmation
Marsh Posté le 18-06-2005 à 23:55:19
ReplyMarsh Posté le 19-06-2005 à 00:12:22
fork() est un appel système (un truc qui fait l'interface entre le noyau et les applications) décrit par Posix. Or windows n'est pas compatible Posix.
Tu peux utiliser Cygwin ou SFU http://www.microsoft.com/windowsse [...] fault.mspx pour assurer une compatibilité Posix. Le deux ont plutot bonne presse.
Pour le second on m'avait dit que son besoin pour Microsoft s'était fait sentir pour certains appels d'offre où une compatibilité Posix était requise. J'ignore en revanche comment il s'intégre à Windows, retour bienvenus.
Marsh Posté le 19-06-2005 à 00:15:39
ben que tu essais de faire tes devoirs de C/Unix sous windows ...
Marsh Posté le 19-06-2005 à 00:18:57
Merci Manatane.
Taz, relis bien les questions avant de répondre stp, merci...
Marsh Posté le 19-06-2005 à 00:21:11
ben oui, je lis bien et je comprends que tu essaies de faire de la programmation Unix.
Marsh Posté le 19-06-2005 à 00:44:08
Ben unistd.h c'est le header qui définit un peu tout ce qui est fondamentale à Posix (ce n'est pas ANSI) et comme Unix==Posix et que Windows!=Posix ben on peut facilement en déduire que tu veux faire de la programmation Unix sur un système incompatible
http://www.opengroup.org/onlinepub [...] std.h.html
Marsh Posté le 19-06-2005 à 01:01:43
Merci de la précision Manatane, au moins ta réponse à toi a le mérite d'etre claire, pas comme certains qui se la jouent des qu'ils parlent à un débutant...
Marsh Posté le 19-06-2005 à 01:09:25
je me la joue pas. Seulement dans ton premier message tu constates toi même que ton programme posix ne fonctionne pas sous Windows. Je te dis donc d'installer un système GNU/Linux conforme POSIX.
Marsh Posté le 19-06-2005 à 18:51:57
oui mais lui il demande une solution pour windows, alors ton linux tu oublies quoi. C'est pas ce qu'il veut!
Marsh Posté le 19-06-2005 à 19:29:37
C'est bon les gars. On vient de m'avertir que le Taz est un beau specimen sur ce forum : toujours a faire le mac et a se foutre de la gueule des moins à l'aise en programmation. N'aggrave pas ton cas petit, tu sais, c'est toujours plus facile de faire le beau derrière l'écran de son ordi, mais devant les gens, quelque chose me dit que tu dois t'écraser vite fait...
Sinon, merci à tous pour les réponses qui m'ont aidées à mieux capter. Merci.
Marsh Posté le 19-06-2005 à 21:57:43
canto13 a écrit : C'est bon les gars. On vient de m'avertir que le Taz est un beau specimen sur ce forum : toujours a faire le mac et a se foutre de la gueule des moins à l'aise en programmation. N'aggrave pas ton cas petit, tu sais, c'est toujours plus facile de faire le beau derrière l'écran de son ordi, mais devant les gens, quelque chose me dit que tu dois t'écraser vite fait... |
On peut reprocher à Taz d'être parfois lapidaire (j'en connais d'autres), mais il est techniquement juste et son expertise est reconnue. Il faut savoir prendre l'information comme elle vient et chercher un peu par soi-même, approfondir... On est pas là pour tout faire tomber tout cuit dans le bec. En principe, on donne des pistes, et les gens progressent d'eux-même...
Pour répondre à ta question initiale, il y a peut être une solution portable dans la glib.
http://developer.gnome.org/doc/API/glib/
Marsh Posté le 19-06-2005 à 22:12:49
pour la version 2.x :
http://developer.gnome.org/doc/API [...] esses.html
Les fonctions sont un peu barbares, mais c'est exactement ce qu'il faut.
Marsh Posté le 27-06-2005 à 11:23:40
Pour windows, la fonction qui permet de cree des processus est CreateProcess(..) . Je te laisse regarder la doc, elle est un peu longue.
Arretez svp avec le combat linux/windows. Si le gars veux faire son application sous windows, c'est son choix, allez pas lui dire de changer d'os ou de faire ça sous linux...
Marsh Posté le 27-06-2005 à 13:30:26
Twinsens a écrit : |
Absolument rien à voir. Le gars voulait utiliser la fonction fork(), qui est une fonction POSIX, d'où les réponses.
Marsh Posté le 04-03-2006 à 16:05:35
Elmoricq a écrit : Absolument rien à voir. Le gars voulait utiliser la fonction fork(), qui est une fonction POSIX, d'où les réponses. |
Non le gars voulait créer un process sous Windows et demandait si on peut le faire avec fork().
La réponse est non, il faut utiliser createProcess.
Marsh Posté le 04-03-2006 à 16:10:13
Taz a écrit : tu veux pas plutôt installe une distrib GNU/Linux ? |
Dis moi Taz, quand tu te trompes en achetant une cheville qui nest pas adaptée à ton mur, tu changes de cheville ou tu rachètes un nouvel appartement ?
Marsh Posté le 04-03-2006 à 22:04:22
exactement, je change de cheville !
c'est pas la peine de faire du POSIX sur du pas POSIX.
CQFD
Marsh Posté le 04-03-2006 à 23:54:57
Je me permet de rajouter une petite chose :
Sous Unix, pour effectuer 2 taches simultanéments, on a tendence à creer 2 process via la fonction fork().
Sous windows, l'approche est différente : on va créer 2 threads dans 1 seul processus.
La différence entre les 2 est qu'il y a une cloison forte qui sépare 2 processus distincts (pas de partage de mémoire systématique, par ex) alors que 2 threads d'un meme processus partagent leur espace data (tas).
A noter qu'Unix permet de créer des threads.
Tout ca pour dire que je pense qu'il te faut plutot créer 2 threads (on va dire, en créer un de plus, car tu en as forcément 1 qui est créé par le main() de ton programme), plutôt que regarder du côté des processus.
La fonction est CreateThread(). Regardes dans la MSDN sur le site de Microsoft. Il y a des exemples simples pour bien comprendre.
Marsh Posté le 02-04-2006 à 15:59:51
> Sous Unix, pour effectuer 2 taches simultanéments, on a tendence à creer 2 process via la fonction fork().
- ...dans les années 80 du siècle dernier, où il n y avait pas de thread...
> Sous windows, l'approche est différente : on va créer 2 threads dans 1 seul processus.
- ...sauf quand on a besoin de cloisonner les données...
Bonjour les bugs et les failles, avec de telles idées reçues.
Marsh Posté le 02-04-2006 à 16:02:25
nargy a écrit : > Sous Unix, pour effectuer 2 taches simultanéments, on a tendence à creer 2 process via la fonction fork(). |
mauvaise réponse. le choix thread/processus se pose toujours aujourd'hui selon ce qu'on veut faire.
Marsh Posté le 02-04-2006 à 16:12:03
> mauvaise réponse....
c est bien ce que je dis:
> - ...sauf quand on a besoin de cloisonner les données...
et j insiste:
> Bonjour les bugs et les failles, avec de telles idées reçues.
idée reçue en question: process = thread
Marsh Posté le 27-07-2007 à 12:26:18
1 an et demi plus tard...
Intéressant en tout cas ce topic, pour des gens qui comme moi sont plus habitués au pinguin qu'à Windob.
Marsh Posté le 27-07-2007 à 14:01:17
CeD69 a écrit : 1 an et demi plus tard... |
C'est bon aussi de relire de vieux truc...
Marsh Posté le 19-09-2015 à 21:47:36
Taz a écrit : exactement, je change de cheville ! |
Sauf que les Windows basé sur un noyau NT sont POSIX
Marsh Posté le 19-09-2015 à 22:15:37
pphilou59 a écrit : |
C'est gentil de fêter la journée du patrimoine, Pelle d'or du jour !
Marsh Posté le 18-06-2005 à 23:49:35
Bonjour,
bon, désolé si ma question est stupide au cas où, mais j'aurai voulu savoir un truc et de toute facon c'est comme ca qu'on progresse en posant des questions.
J'ai fait un programme C sous dev-cpp (et visual C++) qui m'affiche comme erreur qu'il ne reconnait pas la fonction fork(). Est-ce que c'est parce que la librairie unistd.h n'est pas reconnue sous windows et ne marche que sous unix? Ou sinon comment je peux l'ajouter? Et sinon, sous windows, comment on crée des processus?
Merci beaucoup pour les réponses.
Message édité par canto13 le 18-06-2005 à 23:50:34