Passer un code Unix sous Windows (problème avec fork)

Signaler
Messages postés
17
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
3 décembre 2005
-
Messages postés
6
Date d'inscription
lundi 22 mars 2004
Statut
Membre
Dernière intervention
15 mai 2004
-
Je cherche à passer ce code sous windows :

pid_t pid;

pid=fork();

switch (pid)
{
case '0' :
Envoi_carte(Text);
break;
case default :
if (cond)
{
/*killer le processus fils*/
}
break;
}

--- L'ISIMA c'est vraiment pas n'importe quoi ---

11 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
fork c'est posix donc tu peut pas
par contre si tu veu faire la mem chose je sais pas si c'est possible, d'habitude on converti fork+execl par shellexecute, mais juste un fork...

> dans ton switch c'est default: et pas case default: et le break a la fin est inutile

a+
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
case '0' fonctionnera pas, le pid du processus pere est 0, et non pas '0'

aussi, fork existe pas sous windows, il te faut trouver un autre proceder tel que les threads
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
non, fork() retourne 0 dans le fils car il retourne le pid du fils dans le pere, enfin il me semble??
Messages postés
17
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
3 décembre 2005

Un fois les petits bug corrigés ca fait ca :

pid_t pid;

pid=fork();

switch (pid)
{
case 0 :
Envoi_carte(Text);
break;
default :
if (cond)
{
/*killer le processus fils*/
}
break; /*Pas nécessaire*/
}

Deplus je sais que fork n'existe pas sous Windows mais si j'ai posé cette question c que j'aimerai avoir une piste pour traduire ca en "Windows"

PS : pour sebseb42 , 0 c'est pas le pid du pere mais celui du fils.

--- L'ISIMA c'est vraiment pas n'importe quoi ---
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
"fork() returns a value of 0 to the child process and returns the process ID of the child process to the parent process."

donc le pere recoit le pid du fils, qui est non nul, et 0 dans le fils, mais c'est bien ce qui represente le pid du pere
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ben non sebseb42, je connai pas trop ce system mais j'imagine que pid 0 est reserver, ca doit etre l'equivalent du processus inactif sous win qui maintient le cpu en activite

depuis le fils tu obtient le pid du pere avec getppid() et son pid avec getpid(), je pense pas que ces fonctions soient la pour rien ??
Messages postés
25
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
28 mars 2006

pid_t pid=fork();

if(pid < 0){
perror ();
abort();
}

if(pid == 0)
/* code du fils */

else /* code du pere */

voila pour les pas contents....

0 ne represente pas le pid du pere au fait :)

Be yourself
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
dommage, c'est presque ca

le esle est inutile avant le code du pere
Messages postés
25
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
28 mars 2006

tu serais pas un peu rabat-joie djl ??? :-p

en plus le else est utile car le code du pere risque d'etre execute par le fils si on ne sort pas par un exit( ) ou par un autre moyen dans le code specifique du fils... tout depends.... donc j'ai autant raison que toi sur ce point !!!

Be yourself
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui c'est vrai ca depend, mais pour une utilisation pratique il vaut mieux terminer le fils dans son bloc
Messages postés
6
Date d'inscription
lundi 22 mars 2004
Statut
Membre
Dernière intervention
15 mai 2004

bonjour,vous pouvez aussi creer des processus sous windows car de puis windows 95 est apparu une fonction plus élaborée mais aussi plus compliquée pour lancer l'execution d'un autre programme :CreateProcess qui est définie dans le fichier d'entête #include<winbase.h>,ou utiliser carrement la fonction WinExec de l'API windows pour démmarer l'execution d' un programme,ou encore utilider les fonctions de fichier d'entête #include si vous travaillez avec
borland c++.
pour être un bon programmeur il faut affronter toutes les difficultés