🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #13980

Re: Servidor.Compartir una variable entre hijo y padre.

#13980
From: Josep Ramon
Date: Wed, 27 Dec 2000 17:59
60 lines
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-mail
References: <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