Article View: es.comp.os.linux.programacion
Article #13980Re: Servidor.Compartir una variable entre hijo y padre.
From: Josep Ramon
Date: Wed, 27 Dec 2000 17:59
Date: Wed, 27 Dec 2000 17:59
60 lines
2913 bytes
2913 bytes
"Jose Manuel" <pik@latinmail.com> wrote:
>En la llamada al fork yo distinguiria que es lo que tiene que hacer el hijo,
>y que lo que tiene que hacer el padre:
>
>int id;
>...
>iif ( (id=fork())<0)
>{
> /** Error en el fork **/
>}
>else if (id==0)
> {
> /** Codigo del proceso hijo **/
> }
>else {
> /** Codigo del proceso padre **/
> /** Aqui pondria tu codigo... **/
> ...
> shmget(...);
> ptr=shmat(...);
> shmctl(...);
> ...
> for(j=1;j<=ptr[0];j++) //Un bucle porqué enviamos lo mismo a todos
> write(ptr[j],datos,strlen(datos)); //Escrivo los datos a enviar
>
>}
>
>
>
>Una posible explicacion, es que te este entrando en la parte del codigo del
>primer hijo, y este, en el array ptr solo tiene un elemento...
>
>Prueba con esta solucion que te doy. Por lo menos tendras mas claro por
>donde entra la ejecucion.
Gracias por contestar.
No es la culpa de lo que hace el hijo o el padre, ya que lo que hace cada uno
ya se hace bien, excepto en compartir la variable.
La variable la comparten, ya que si en el hijo le pongo un printf(ptr) y en el
padre se modifica, el hijo se entera de que se ha modificado.
Lo que no entiendo es porqué al hacer:
...
for(j=1;j<ptr[0];j++)
write(ptr[j];datos,strlen(datos));
..
Donde en ptr[j], j>0 {1,2,3,4,...} se guardan los descriptores que me da el
accept(...) cuando le llega una nueva petición de un nuevo cliente.
Pues bien, el problema es que solo le manda datos al primer cliente que se
conecta, y a los otros no les manda nada.
Me parece que se tiene que poner algún semáforo, pero no se muy bien como se
hace.
Technical Details
Message-ID:
<977939719.866450502@news.teleline.es>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!news-x.support.nl!newspeer.clara.net!newspeer2.clara.net!news.clara.net!ldn-newsfeed.speedport.net!newsfeed.speedport.net!naxos.belnet.be!news.belnet.be!news.rediris.es!newsfeed.mad.ttd.net!telenews.teleline.es!not-for-mailReferences:
<977855016.1208025462@news.teleline.es> <92cjc2$6n9$1@talia.mad.ttd.net>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,530151add8193e08 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2000-12-27 09:55:02 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!news-x.support.nl!newspeer.clara.net!newspeer2.clara.net!news.clara.net!ldn-newsfeed.speedport.net!newsfeed.speedport.net!naxos.belnet.be!news.belnet.be!news.rediris.es!newsfeed.mad.ttd.net!telenews.teleline.es!not-for-mail X-Newsreader: kexpress 0.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Message-ID: <977939719.866450502@news.teleline.es> References: <977855016.1208025462@news.teleline.es> <92cjc2$6n9$1@talia.mad.ttd.net> Subject: Re: Servidor.Compartir una variable entre hijo y padre. Newsgroups: es.comp.os.linux.programacion From: Josep Ramon <jrbenet@teleline.es> Content-Transfer-Encoding: quoted-printable Lines: 60 Date: Wed, 27 Dec 2000 17:59:10 GMT NNTP-Posting-Host: 62.82.59.26 X-Complaints-To: newsmaster@company.com X-Trace: telenews.teleline.es 977939950 62.82.59.26 (Wed, 27 Dec 2000 18:59:10 MET) NNTP-Posting-Date: Wed, 27 Dec 2000 18:59:10 MET Organization: Typhoon Authentication Testing Club