Deutsch English Français Italiano |
<u2ugim$2lt4$1@paganini.bofh.team> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!feeds.phibee-telecom.net!weretis.net!feeder8.news.weretis.net!paganini.bofh.team!not-for-mail From: Francois LE COAT <lecoat@atari.org> Newsgroups: fr.comp.sys.atari Subject: =?UTF-8?Q?Re:_fork=28=29_sous_Multitos_question_=c3=a0_Fran=c3=a7oi?= =?UTF-8?Q?s?= Date: Wed, 3 May 2023 22:35:34 +0200 Organization: To protect and to server Message-ID: <u2ugim$2lt4$1@paganini.bofh.team> References: <M8e3pvNp4cbQ8PseiWxbN_ORsQs@jntp> <81f7a286-e4ae-495c-9527-d15d720575a1n@googlegroups.com> <PkoV1QHwjG6i89kf67QK2xCcllk@jntp> <u2tbbd$3un10$1@paganini.bofh.team> <ztqSp_hYdmEO8dUjnwI-UcARM20@jntp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: quoted-printable Injection-Date: Wed, 3 May 2023 20:35:34 -0000 (UTC) Injection-Info: paganini.bofh.team; logging-data="87972"; posting-host="FA92OzQsKw/evhUqc0ALDw.user.paganini.bofh.team"; mail-complaints-to="usenet@bofh.team"; posting-account="9dIQLXBM7WM9KzA+yjdR4A"; User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:91.0) Gecko/20100101 SeaMonkey/2.53.16 Cancel-Lock: sha256:UTwxPFkUidua8yl1geCpagoQJMMvGdJw72hW3FoUsa0= X-Notice: Filtered by postfilter v. 0.9.3 Bytes: 3674 Lines: 62 Salut, OL =E9crit=A0: > Voici le code modifi=E9: >=20 > /* * Programme who|wc : compte le nombre d'utilisateurs */ #include=20 > <stdio.h> > #include <unistd.h> #include <stdlib.h> >=20 > void main(void); int p[2]; /* Identificateurs des canaux de=20 > communication */ > void main() > {=A0=A0 int pid; /* Identificateur des processus */ =A0=A0 if(pipe(p)!=3D= 0) > =A0=A0 {=A0=A0=A0=A0=A0=A0=A0 perror("\nCreation d'un canal impossible= \n"); > =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 exit(1); > =A0=A0 } >=20 > =A0=A0 pid=3Dfork(); > =A0=A0 if(pid=3D=3D0) > =A0=A0 { /* Processus FILS : Il execute "who" */ > =A0=A0=A0=A0=A0=A0 close(1); /* Fermeture de la sortie standard */ > =A0=A0=A0=A0=A0=A0 dup(p[1]); /* Duplique la sortie du fils en sortie = standard */ > =A0=A0=A0=A0=A0=A0 close(p[0]); /* L'entree du fils ne sert plus a rie= n */ > =A0=A0=A0=A0=A0=A0 close(p[1]); /* La sortie non plus */ > =A0=A0=A0=A0=A0=A0 execlp("who","who",NULL); > =A0=A0 } > =A0=A0 else =A0=A0 if(pid<0) > =A0=A0 {=A0=A0=A0=A0=A0=A0=A0 perror("\nFork impossible\n"); > =A0=A0 } > =A0=A0 /* Processus P=E8re pas besoin de fork c'est stupide pour faire= juste=20 > who|wc si on n'a pas besoin d'attendre et de faire autre chose*/ >=20 > =A0=A0 close(0); /* Fermeture de l'entree standard */ > =A0=A0 dup(p[0]); /* Duplique l'entree du pere en entree standard */ > =A0=A0 close(p[0]); /* L'entree du pere ne sert plus a rien */ > =A0=A0 close(p[1]); /* La sortie non plus */ > =A0=A0 execlp("wc","wc",NULL); > =A0=A0 printf("semble que quelque chose s'est mal pass=E9!\n"); > =A0=A0 exit(1); > } Oui, je suis d'accord. C'est =E9quivalent. Mais =E7a n'est pas ce que j'avais =E9crit. Mon programme a l'int=E9r=EAt de montrer l'usage de la fonction wait(). `wait` est aussi une commande Unix, que j'utilise fr=E9quemment dans les scripts shell. L'int=E9r=EAt du programme n'=E9tai= t pas d'=EAtre le plus concis possible, mais d'apprendre l'usage du fork(). Donc je pr=E9f=E8re ma version. Il y a toujours beaucoup de styles diff=E9rents pour =E9crire la m=EAme chose. Chacun son style. Sinon, je n'emploie pas le terme "thread" car =E7a n'est pas la m=EAme chose. On parle bien d'un programme parall=E8le bas=E9 sur le multi-processing. --=20 Fran=E7ois LE COAT Auteur de Eur=EAka 2.12 (Grapheur 2D, Modeleur 3D) http://eureka.atari.org/