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

Liste des GroupesRevenir à fcs atari 
Sujet : Re: fork() sous Multitos question à François
De : ol.google (at) *nospam* lutece.net (OL)
Groupes : fr.comp.sys.atari
Date : 03. May 2023, 22:15:08
Autres entêtes
Organisation : Nemoweb
Message-ID : <ztqSp_hYdmEO8dUjnwI-UcARM20@jntp>
References : 1 2 3 4
User-Agent : Nemo/0.999a
Salut mon petit loup
"Béotien" voyons cela, je ne suis pas un habitant de Béotie donc cela ne doit pas correspondre, je ne suis pas non plus un dialecte de langue grec ancien, est ce que je dois comprendre qu'il s'agit d'une insulte cultivée d'homme supérieur?
On va donc partir sur cette hypothèse mais je pense que c'est l'arroseur qui va être arrosé, alors un peu de technique.

Salut,
 Tu as la réaction d'un béotien à qui l'on n'a pas appris à lire un
programme parallèle.
Oh si j'ai très bien lu et je comprend très bien.

Il y a deux fork() et donc deux processus
fils et petit-fils qui sont créés.
Oui j'ai compris même si je ne suis pas d'accord sur le besoin du 2eme fork si tu ne veux pas faire d'attente dans le programme père mais on verra plus tard
Ils communiquent par un canal
dédié.
Oui
Il faut bien attendre (sans rien faire), sinon la fin du
processus père, met fin aux deux processus fils et petit-fils.
Bah non, ce n'est pas nécessaire c'est que tu t'y prend mal, c'est beaucoup plus simple que cela
En plus c'est à mon avis totalement faux, le système ne libérera rien tant que les processus sont en vie pire ce sont 2 process totalement différent ou tout a été dupliqué il ne s'agit absolument pas de thread, c'est 2 processus cloisonnés le fork.
Donc si tu ne veux faire qu'afficher who|wc sans récupérer les data et traiter après cela le second fork ne sert à rien! Tu as compliqué quelque la chose mais possible que tu ai écrit cela il y a 20 ans et que tu ai oublié...
A la fin du texte une version simplifiée, cela fait exactement la même chose sans l'attente et c'est un fork en moins.

 Le processus fils lance la commande `who` sans aucun argument
avec la commande execlp().
Encore une erreur, who est lancé par le fils un détail mais enfin quand on à la tête comme un melon faut assurer

Le processus petit-fils lance la
Et là par ricochet c'est donc un second fils qui est créé pas un petit fils, mais c'est curieux dans la logique ce coup-ci tu ne te trompes pas.
Le reste tout cela j'ai compris et je suis d'accord.
Crois tu que je sois si "béotien" que cela? Mais il me semble que pour le moment j'ai un point et toi 0
Bon je suis bon joueur, je te propose de te rattraper, si tu arrives à faire ce défit je veux bien être un béotien et même l'accepter parce que je ne sais pas faire, attention tous les mots comptent.
Voilà je voudrais créer 2 threads (attention pas un fork qui duplique complètement le processus donc qui ne partage pas les données) et que ces 2 threads fassent n'importe quoi (un simple printf par exemple) qui montre qu'ils manipulent une même variable par exemple qui ajoute 1 dans un thread et retire 1 dans l'autre. Petite demande supplémentaire que cela fonctionne sous Unix et Freemint.
Alors juré si cela fonctionne je te tirerais mon chapeau (Nota évites de demander à ChatGPT!).
 Mais là ce que je vois c'est que tu ne sembles pas aussi pointu que ce que tu sembles dire, pas sans connaissance n'exagérons rien non plus je ne m'appelle pas FLC pour faire ce genre supériorité.
Bonne nuit.
Voici le code modifié:
/* * Programme who|wc : compte le nombre d'utilisateurs */ #include <stdio.h>
#include <unistd.h> #include <stdlib.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 FILS : Il execute "who" */
        close(1); /* Fermeture de la sortie standard */
        dup(p[1]); /* Duplique la sortie du fils en sortie standard */
        close(p[0]); /* L'entree du fils 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 Père pas besoin de fork c'est stupide pour faire juste who|wc si on n'a pas besoin d'attendre et de faire autre chose*/
    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);
        printf("semble que quelque chose s'est mal passé!\n");
    exit(1);
}
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