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

nepomuk Messages postés 17 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 3 décembre 2005 - 6 févr. 2004 à 11:25
delphifan Messages postés 6 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 15 mai 2004 - 12 avril 2004 à 14:30
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

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
6 févr. 2004 à 17:53
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+
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
6 févr. 2004 à 19:07
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
6 févr. 2004 à 19:12
non, fork() retourne 0 dans le fils car il retourne le pid du fils dans le pere, enfin il me semble??
0
nepomuk Messages postés 17 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 3 décembre 2005
6 févr. 2004 à 19:19
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 ---
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
6 févr. 2004 à 19:20
"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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
6 févr. 2004 à 20:09
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 ??
0
patriarch24 Messages postés 25 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 28 mars 2006
22 mars 2004 à 13:46
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 mars 2004 à 14:10
dommage, c'est presque ca

le esle est inutile avant le code du pere
0
patriarch24 Messages postés 25 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 28 mars 2006
23 mars 2004 à 12:53
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 mars 2004 à 14:32
oui c'est vrai ca depend, mais pour une utilisation pratique il vaut mieux terminer le fils dans son bloc
0
delphifan Messages postés 6 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 15 mai 2004
12 avril 2004 à 14:30
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
0