CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Question Prog système en C

Alex6360
Alex6360
Niveau 36
15 décembre 2016 à 21:22:36

Bonjour, j'ai une question sur ce code :

int main (int argc, char *argv[]) {
int tube[2];
char ligne[200];
struct sigaction ac;
sigemptyset(&ac.sa_mask);
ac.sa_handler=coucou;
ac.sa_flags=0;
if (sigaction(SIGUSR1,&ac,NULL)){
perror("Installation coucou");
}
if (pipe(tube) == -1){
perror("pipe");
exit(errno);
}
switch (pid=fork()) {
case -1 :
perror("fork");
exit(errno);
case 0 :
close(tube[1]);
codeFils(tube) ;
exit(0);
default : close(tube[0]);
}
//Question comprend ce bout de code
while (fgets(ligne, TAILLE, stdin) || errno==EINTR) {
if (errno ==EINTR) {
errno=0;
continue;
}
if (write(tube[1],ligne,strlen(ligne)) != strlen(ligne)){
perror("write");
exit(errno);
}
}
return 0;
}

Cette partie de code (en dessous du commentaire), est exécuté seulement par le père ou aussi le fils ?
Parce que ce TP est correct, ça fonctionne, mais je me pose la question.
Merci d'avance.

_S0uL
_S0uL
Niveau 9
15 décembre 2016 à 21:30:05

Tu termine ton processus fils ici :

case 0 :
    close(tube[1]);
    codeFils(tube) ;
    exit(0);

Donc celui ci n'éxiste plus au moment ou ce code est exécuté
Par contre à l'avenir utilise les balises code s'il te plait.

Alex6360
Alex6360
Niveau 36
15 décembre 2016 à 21:41:52

D'accord, donc que je mette le code du père dans le default ou après le switch ça revient au même ?

Alex6360
Alex6360
Niveau 36
15 décembre 2016 à 21:46:35

Si je mets un wait après la boucle, j'aurais le code de retour du fils ?
Merci de ton aide

_S0uL
_S0uL
Niveau 9
15 décembre 2016 à 21:47:10

Hmmm je ne suis pas expert en switch quand je programme quelque chose avec un appel à fork (); j'utilise plutôt un if. J'aurai tendance à te répondre oui même si je ne ferai pas comme ça. Je laisse des gens plus expérimentés me corriger là dessus.

Alex6360
Alex6360
Niveau 36
15 décembre 2016 à 22:14:57

D'accord, je pense aussi que c'est le cas, je testerai.
Puisque le processus père est le main en fait ?

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment