Re: fork() sous Multitos question à François

Liste des GroupesRevenir à fcs atari 
Sujet : Re: fork() sous Multitos question à François
De : lecoat (at) *nospam* atari.org (Francois LE COAT)
Groupes : fr.comp.sys.atari
Date : 03. May 2023, 12:00:13
Autres entêtes
Organisation : To protect and to server
Message-ID : <u2tbbd$3un10$1@paganini.bofh.team>
References : 1 2 3
User-Agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:91.0) Gecko/20100101 SeaMonkey/2.53.16
Salut,
Tu as la réaction d'un béotien à qui l'on n'a pas appris à lire un
programme parallèle. Il y a deux fork() et donc deux processus
fils et petit-fils qui sont créés. Ils communiquent par un canal
dédié. Il faut bien attendre (sans rien faire), sinon la fin du
processus père, met fin aux deux processus fils et petit-fils.
Le processus fils lance la commande `who` sans aucun argument
avec la commande execlp(). Le processus petit-fils lance la
commande `wc` sans aucun argument avec la commande execlp().
La sortie standard de `who` est redirigée vers l'entrée standard
de `wc`.
`who` génère une liste de mots, qui correspondent à chacun des
noms des utilisateurs de la machine Unix. `wc` compte ces mots.
La sortie résultat des deux processus, est le nombre d'utilisateurs.
Tu peux lancer `who` sous freeMiNT. Tu peux aussi lancer `wc`.
Tu peux enfin lancer la commande `who|wc`. Si tu compiles le
programme et que tu le lances, il te donnera le même résultat.
C'est magique =)
OL écrit :
c'est correcte, je suppose que tu as fait exprès d'attendre si par exemple tu veux faire autre chose après sinon c'est compliqué pour rien. Bon ce n'est pas ce que tu nous avais vendu, je suis déçu, j'attendais l'utilisation de threads comme tu l'avais annoncé ici ce n'est pas du tout le cas, c'est juste une redirection des entrée sortie pour singer le shell, les fonctions execlp() clôturent le thread, il n'y a aucun multitâche là dedans. Par contre cela illustre bien les redirections que l'on peut faire en Unix
 
/*
 * Programme who|wc : compte le nombre d'utilisateurs
 */
>
#include <stdio.h>
#include <unistd.h>
>
void main(void);
>
int p[2]; /* Identificateurs des canaux de communication */
>
void main()
    {
    int pid; /* Identificateur des processus */
>
     if(pipe(p)!=0)
         {
        perror("\nCreation d'un canal impossible\n");
        exit(1);
        }
>
    pid=fork();
     if(pid==0)
         { /* Processus PERE : Il execute "who" */
        close(1); /* Fermeture de la sortie standard */
        dup(p[1]) /* Duplique la sortie du pere en sortie standard */
        close(p[0]); /* L'entree du pere ne sert plus a rien */
        close(p[1]); /* La sortie non plus */
        execlp("who","who",NULL);
        }
    else if(pid<0)
         {
        perror("\nFork impossible\n");
        }
/* Processus Fils : il execute a nouveau un fork */
    pid=fork();
     if(pid==0)
         { /* Processus PERE : Il execute "wc" */
        close(0); /* Fermeture de l'entree standard */
        dup(p[0]) /* Duplique l'entree du pere en entree standard */
        close(p[0]); /* L'entree du pere ne sert plus a rien */
        close(p[1]); /* La sortie non plus */
        execlp("wc","wc",NULL);
        }
    else if(pid<0)
         {
        perror("\nFork impossible\n");
        }
/* Processus Fils : Attend la fin des deux processus */
    close(p[0]); /* L'entree du fils ne sert plus a rien */
    close(p[1]); /* La sortie non plus */
    while(wait()>=0);
     exit(0);
    }

Date Sujet#  Auteur
1 May 23 * fork() sous Multitos question à François17OL
1 May 23 `* Re: fork() sous Multitos question à François16Francois LE COAT
2 May 23  `* Re: fork() sous Multitos question à François15OL
3 May 23   `* Re: fork() sous Multitos question à François14Francois LE COAT
3 May 23    +* Re: fork() sous Multitos question à François3pascal WIJSBROEK
3 May 23    i`* Re: fork() sous Multitos question à François2Francois LE COAT
3 May 23    i `- Re: fork() sous Multitos question à François1pascal WIJSBROEK
3 May 23    `* Re: fork() sous Multitos question à François10OL
3 May 23     `* Re: fork() sous Multitos question à François9Francois LE COAT
3 May 23      `* Re: fork() sous Multitos question à François8OL
4 May 23       `* Re: fork() sous Multitos question à François7Francois LE COAT
4 May 23        `* Re: fork() sous Multitos question à François6OL
5 May 23         `* Re: fork() sous Multitos question à François5Francois LE COAT
5 May 23          `* Re: fork() sous Multitos question à François4OL
6 May 23           `* Re: fork() sous Multitos question à François3Francois LE COAT
6 May 23            +- Re: fork() sous Multitos question à François1OL
7 May 23            `- Re: fork() sous Multitos question à François1pascal WIJSBROEK

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal