logo Homepage
+  NewbieContest
|-+  Programmation» Langages compilés» Besoin d'aide en C: fork, printf
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Besoin d'aide en C: fork, printf  (Lu 5148 fois)
anarcho-hippy-punk

Profil challenge

Classement : 1365/54252

Néophyte
*
Hors ligne Hors ligne
Messages: 22

nom trop criard, mais bon…


Voir le profil
« le: 02 Septembre 2011 à 05:14:13 »

Bonjour à tous!

J'apprends le C ces temps (pour l'école {ça vous rappelle quelque chose, fork, exec et Cie ?}), et je tombe sur un os. Voilà mon programme:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
pid_t pid;
int i;
for (i=0;i<10;i++) {
pid = fork();

if (pid > 0)
printf("parent %d\n", i);
if (pid < 0)
printf("error forking\n");
else {
printf("child %d\n", i);
exit(0);
}
}
return 0;
}
Et voilà le résultat:
Code:
parent 0
child 0
child 0

Je vous laisse deviner pourquoi ça me plait pas du tout.. J'ai eu d'autres bizarreries du genre.
Quelqu'un peut-il m'expliquer, svp?
Journalisée

message plus étrange que les autres, pour attirer le regard
Ge0

Profil challenge

Classement : 16/54252

Membre Senior
****
Hors ligne Hors ligne
Messages: 377


Voir le profil WWW
« #1 le: 02 Septembre 2011 à 21:16:28 »

Et si t'affichais le contenu de la variable pid au lieu de i ?

http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/fork.2.html

"En cas de succès, le PID du fils est renvoyé au processus parent."

Donc par instinct :

Code:
pid_t pid = fork();
if(pid) {
     printf("Je suis le pere, mon pid est %d et celui de mon fils est %d.\n", getpid(), pid);
} else {
     printf("Je suis le fils, mon pid est %d.\n", getpid());
}

N'ayant fait que trop peu de programmation système sous Linux, je ne peux t'affirmer ce que j'avance.
« Dernière édition: 02 Septembre 2011 à 21:20:18 par Geo » Journalisée
harvey

Profil challenge

Classement : 12/54252

Membre Senior
****
Hors ligne Hors ligne
Messages: 316


Voir le profil WWW
« #2 le: 03 Septembre 2011 à 01:00:55 »

Citation
Code:
if (pid > 0)
printf("parent %d\n", i);
if (pid < 0)
printf("error forking\n");
else {
printf("child %d\n", i);
exit(0);
Le deuxième 'if' devrait être un 'else if'. Ici, quand le pid est supérieur ou égal à 0 (donc dans le cas du parent et du fils) le processus se termine.
Journalisée

L'entropie vient en mangeant.
anarcho-hippy-punk

Profil challenge

Classement : 1365/54252

Néophyte
*
Hors ligne Hors ligne
Messages: 22

nom trop criard, mais bon…


Voir le profil
« #3 le: 05 Septembre 2011 à 16:55:04 »

waw... merci

Je crois que je vais aller me cacher pendant un moment 
Journalisée

message plus étrange que les autres, pour attirer le regard
Pages: [1]
  Imprimer  
 
Aller à: