Programmation systéme en C
muslim1987
Messages postés
3
Statut
Membre
-
sousou -
sousou -
Bonjour,
en essayant de compiler un code source ecrit en C,
//tp1.c
#include<unistd.h>
#include<stdio.h>
int main()
{
long pid;
pid=fork();
switch(pid)
{
case -1 :
printf("\nerreur");
break;
case 0 :
printf("\nfils:\n valeur de retoure de fork : %ld",pid);
break;
default :
printf("\npére:\n valeur de retoure de fork : %ld",pid);
break;
}
return 0;
}
le compilateur m'affiche ce message:
salmen@salmen-laptop:~$ gcc -o tp1 tp1.c
tp1.c:1:18: erreur: stdio.h : Aucun fichier ou répertoire de ce type
tp1.c:2:19: erreur: unistd.h : Aucun fichier ou répertoire de ce type
tp1.c: In function «main":
tp1.c:8: attention : incompatible implicit declaration of built-in function «printf"
svp aidez moi c'est urgent
et merci d'avance.
en essayant de compiler un code source ecrit en C,
//tp1.c
#include<unistd.h>
#include<stdio.h>
int main()
{
long pid;
pid=fork();
switch(pid)
{
case -1 :
printf("\nerreur");
break;
case 0 :
printf("\nfils:\n valeur de retoure de fork : %ld",pid);
break;
default :
printf("\npére:\n valeur de retoure de fork : %ld",pid);
break;
}
return 0;
}
le compilateur m'affiche ce message:
salmen@salmen-laptop:~$ gcc -o tp1 tp1.c
tp1.c:1:18: erreur: stdio.h : Aucun fichier ou répertoire de ce type
tp1.c:2:19: erreur: unistd.h : Aucun fichier ou répertoire de ce type
tp1.c: In function «main":
tp1.c:8: attention : incompatible implicit declaration of built-in function «printf"
svp aidez moi c'est urgent
et merci d'avance.
Configuration: Linux Firefox 2.0.0.6
2 réponses
-
Salut,
1. il faut installer le paquet libc6-dev
2. je ne vois pas pourquoi tu veux afficher le retour de fork vu que tu traites déjà les cas avec switch
fork() retourne :
-1 si erreur (en ce moment la variable errno contiendra le code d'erreur : ENOMEM - pas de mémore dispo, EAGAIN - le système n'a pas de la place, mais il aura bientôpt)
0 - on se trouve dans le processus fils
PID fils - on se trouve dans le processus père
Ce qu'on veut récuperer c'est plutôt les PID des processus, et pour ça on utilise l'appel-système getpid()
fork ne fait que dupliquer le retour appelant
le retour de fork permet de faire distincition entre le processus père et fils.
Voici un exemplelami20j@debian:~/trash$ cat pid.c #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<errno.h> int main () { pid_t pid_fils; do { pid_fils = fork (); } while (pid_fils == -1 && errno == EAGAIN); switch (pid_fils) { case -1: fprintf (stderr, "Erreur fork() : %d\n", errno); return 1; case 0: /* processus fils */ fprintf (stdout, "Fils : PID = %ld, Père = %ld\n", (long) getpid (), (long) getppid ()); break; default: /*processus père */ fprintf (stdout, "Père : PID = %ld ; PPID = %ld, Fils : PID = %ld\n", (long) getpid (), (long) getppid (), (long) pid_fils); break; } return 0; } lami20j@debian:~/trash$ gcc pid.c -o pid lami20j@debian:~/trash$ ./pid Fils : PID = 3387, Père = 3386 Père : PID = 3386 ; PPID = 2957, Fils : PID = 3387 lami20j@debian:~/trash$ echo $$ 2957 lami20j@debian:~/trash$
-
Salut,
je te recommande ce livre Programmation système en C sous Linux