Programmation systéme en C

Fermé
muslim1987 Messages postés 3 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 19 juin 2008 - 12 avril 2008 à 05:06
 sousou - 4 juin 2009 à 21:27
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.
A voir également:

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 avril 2008 à 08:00
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
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$


0
merci bcp c tres gentil de ta part
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 avril 2008 à 08:23
Salut,

je te recommande ce livre Programmation système en C sous Linux
0
muslim1987 Messages postés 3 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 19 juin 2008
18 juin 2008 à 15:34
merci et je suis vraiment desolé car j'ai lu ta reponce qu'aujourd'hui
et encore merci 1000000000000 fois
0