Deutsch   English   Français   Italiano  
<ztqSp_hYdmEO8dUjnwI-UcARM20@jntp>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!2.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!pasdenom.info!from-devjntp
Message-ID: <ztqSp_hYdmEO8dUjnwI-UcARM20@jntp>
JNTP-Route: news2.nemoweb.net
JNTP-DataType: Article
Subject: Re: fork() sous Multitos question =?UTF-8?Q?=C3=A0=20Fran=C3=A7ois?=
References: <M8e3pvNp4cbQ8PseiWxbN_ORsQs@jntp> <81f7a286-e4ae-495c-9527-d15d720575a1n@googlegroups.com>
 <PkoV1QHwjG6i89kf67QK2xCcllk@jntp> <u2tbbd$3un10$1@paganini.bofh.team>
Newsgroups: fr.comp.sys.atari
JNTP-HashClient: zOlxDz4E7CTaXmi3g43p19Orv_U
JNTP-ThreadID: 53mGNaW-tNcWq-bWiAlznNy1m4c
JNTP-Uri: http://news2.nemoweb.net/?DataID=ztqSp_hYdmEO8dUjnwI-UcARM20@jntp
User-Agent: Nemo/0.999a
JNTP-OriginServer: news2.nemoweb.net
Date: Wed, 03 May 23 20:15:08 +0000
Organization: Nemoweb
JNTP-Browser: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0
Injection-Info: news2.nemoweb.net; posting-host="7d341e3454ec4b1c53e88ae37e79f0815f3a8324"; logging-data="2023-05-03T20:15:08Z/7894297"; posting-account="69@news2.nemoweb.net"; mail-complaints-to="newsmaster@news2.nemoweb.net"
JNTP-ProtocolVersion: 0.21.1
JNTP-Server: PhpNemoServer/0.94.5
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-JNTP-JsonNewsGateway: 0.96
From: OL <ol.google@lutece.net>
Bytes: 6021
Lines: 122

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);	
}