Programmation systéme en C
muslim1987
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
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
- Restauration systeme windows 10 - Guide
- Vérificateur des fichiers système - Guide
- Application de programmation - Guide
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
- Cloner disque systeme - 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