Rechercher : dans
Par :

Programmation systéme en C

Dernière réponse le 4 jun 2009 à 21:27:06 muslim1987, le 12 avr 2008 à 05:06:00 
 Signaler ce message aux modérateurs

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.

Configuration: Linux
Firefox 2.0.0.6

Meilleures réponses pour « programmation systéme en C » dans :
Ressources programmation système Linux Voir Voici quelques liens qui vous permettront de vous aider à vous débrouiller avec la programmation système sous Linux. Tutoriels * Page de M. Billaud (fr) Un cours/tutoriel sur la programmation système et réseau sous Unix. Très complet. Cours de...
Programmation réseau - Les sockets VoirIntroduction aux sockets La notion de sockets a été introduite dans les distributions de Berkeley (un fameux système de type UNIX, dont beaucoup de distributions actuelles utilisent des morceaux de code), c'est la raison pour laquelle on parle...

1

lami20j, le 12 avr 2008 à 08:00:58

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$


106485010510997108

Répondre à lami20j

4

 sousou, le 4 jun 2009 à 21:27:06

Merci bcp c tres gentil de ta part

Répondre à sousou

2

lami20j, le 12 avr 2008 à 08:23:21

Salut,

je te recommande ce livre Programmation système en C sous Linux 106485010510997108

Répondre à lami20j

3

muslim1987, le 18 jun 2008 à 15:34:56

Merci et je suis vraiment desolé car j'ai lu ta reponce qu'aujourd'hui
et encore merci 1000000000000 fois

Répondre à muslim1987