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.
A voir également:
- Programmation systéme en C
- Vérificateur des fichiers système - Guide
- Restauration systeme windows 10 - Guide
- Application de programmation - Guide
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
- Comment refaire le système d'un ordinateur - Guide
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 exemple
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 exemple
lami20j@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$
sousou
merci bcp c tres gentil de ta part