j'ai un problème à la compilation avec le 1er programme du cours : La programmation en C sous UNIX.
/* Pour les constantes EXIT_SUCCESS et EXIT_FAILURE */
#include <stdlib.h>
/* Pour fprintf() */
#include <stdio.h>
/* Pour fork() */
#include <unistd.h>
/* Pour perror() et errno */
#include <errno.h>
/* Pour le type pid_t */
#include <sys/types.h>
/* La fonction create_process duplique le processus appelant et retourne
le PID du processus fils ainsi créé */
pid_t create_process(void)
{
/* On crée une nouvelle valeur de type pid_t */
pid_t pid;
/* On fork() tant que l'erreur est EAGAIN */
do {
pid = fork();
} while ((pid == -1) && (errno == EAGAIN));
/* On retourne le PID du processus ainsi créé */
return pid;
}
/* La fonction child_process effectue les actions du processus fils */
void child_process(void)
{
printf(" Nous sommes dans le fils !\n"
" Le PID du fils est %d.\n"
" Le PPID du fils est %d.\n", (int) getpid(), (int) getppid());
}
/* La fonction father_process effectue les actions du processus père */
void father_process(int child_pid)
{
printf(" Nous sommes dans le père !\n"
" Le PID du fils est %d.\n"
" Le PID du père est %d.\n", (int) child_pid, (int) getpid());
}
int main(void)
{
pid_t pid = create_process();
switch (pid) {
/* Si on a une erreur irrémédiable (ENOMEM dans notre cas) */
case -1:
perror("fork");
return EXIT_FAILURE;
break;
/* Si on est dans le fils */
case 0:
child_process();
break;
/* Si on est dans le père */
default:
father_process(pid);
break;
}
return EXIT_SUCCESS;
}
Quand je veux compiler j'ai l'erreur:
||=== Build: Debug in PIPE (compiler: GNU GCC Compiler) ===|
C:\Users\bernard\Documents\langage_C\FIRST_PROJECT\ESSAI_3\PIPE\main_1.c||In function 'create_process':|
C:\Users\bernard\Documents\langage_C\FIRST_PROJECT\ESSAI_3\PIPE\main_1.c|22|warning: implicit declaration of function 'fork' [-Wimplicit-function-declaration]|
C:\Users\bernard\Documents\langage_C\FIRST_PROJECT\ESSAI_3\PIPE\main_1.c||In function 'child_process':|
C:\Users\bernard\Documents\langage_C\FIRST_PROJECT\ESSAI_3\PIPE\main_1.c|34|warning: implicit declaration of function 'getppid'; did you mean 'getpid'? [-Wimplicit-function-declaration]|
obj\Debug\main_1.o||In function `create_process':|
C:\Users\bernard\Documents\langage_C\FIRST_PROJECT\ESSAI_3\PIPE\main_1.c|22|undefined reference to `fork'|
obj\Debug\main_1.o||In function `child_process':|
C:\Users\bernard\Documents\langage_C\FIRST_PROJECT\ESSAI_3\PIPE\main_1.c|32|undefined reference to `getppid'|
||error: ld returned 1 exit status|
||=== Build failed: 3 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
Es-tu sûr de suivre la bonne voie? Ton cours : La programmation en C sous Unix Ton code : tu es sous Windows.
Si tu utilises Cygwin, ça devrait peut-être pouvoir avoir les fork (avec la demande de bibliothèque -lcygwin) Si tu utilise MinGW, ça ne marcheras certainement pas car Windows n'utilise pas fork pour créer des processus.
En effet, avec C::B c'est par défaut du MinGW sous Windows.
Avec un livre typiquement prévu pour Unix tu risques d'avoir des choses qui ne fonctionneront pas sous Windows. Il y a peu de différences entre Unix et Linux, donc un risque nettement moindre de problèmes sous Linux. Peut-être que sauter le chapitre sur les fork() est une possibilité. Pour moi, en 35 ans de métiers, je les ai utilisés que quelques jours; et je fais bien de l'informatique système en C! Pour toute autre informatique ça serait moins! Tu peux aussi utiliser un autre livre.
Vous appelez un livre un cours ; Au début je me demandais ce que cela voulez dire . Mais une info intéressante: en 35 ans je l'ai utilisé rarement, par contre les threads , les sémaphores , les mutexs et les queues ils fonctionnent bien . J'ai surtout suivi le cours pour les pipes car ça ne fonctionne pas aussi sous Windows.
Oui je suis sur Windows 10 et j'utilise Code::Blocks donc je pense que c'est MinGW .
La solution alors serait de passer sur Linux ?
@+
BB
La solution la plus simple serait d'utiliser les libs Cygwin plutôt.
problème avec fork() à la compilation
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
En recherche d'emploi.