🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: controlar un programa desde otro

#4
From: Claudio S.
Date: Sat, 05 Oct 2002 09:12
73 lines
3912 bytes
El Fri, 4 Oct 2002 08:58:59 +0200, Lepton <reinob@jazzfree.com> escribi�:
> 
> On Wed, 2 Oct 2002, Claudio S. wrote:
> 
> # El Wed, 2 Oct 2002 17:40:01 +0200, Lepton <reinob@jazzfree.com> escribi�:
> # >
> # > [ Lo envio tambien a es.comp.hackers, ya que la idea ha
> # >   originado alli (el servidor udp), y quiza alguien de
> # >   alli tambien pueda ayudar :) ]
> # >
> # > Hola,
> # >
> # > Para un programilla que estoy haciendo, necesito ejecutar un
> # > programa (concretamente un shell /bin/sh), de forma que su
> # > stdin sea un pipe creado por mi, y lo mismo con su stdout (por
> # > ahora ignoraremos el stderr..)
> # >
> # > Mi idea era la siguiente:
> # >
> # > Usando pipe() genero un par de descriptores (in[0] e in[1]), de
> # > forma que yo leo de in[0] lo que el programa escribe en in[1].
> # >
> # > De igual forma, con otro pipe() hago out[0] y out[1] de forma que
> # > lo que yo escribo en out[1] lo lee el programa en out[0].
> # >
> # > Por tanto, tengo que conseguir que despues del fork() pero antes
> # > del exec() el stdin (descriptor 0) sea el mismo que out[0], y
> # > vice-versa, que el stdout (descriptor 1) sea el mismo que in[1].
> # >
> # > Luego yo le envio caracteres al shell escribiendo en out[1], y
> # > leo lo que genera el shell de in[0].
> # >
> # > El problema es que no se como hacer que stdin se asocie a otro
> # > descriptor, y lo mismo con stdout.
> #
> # dup
> #
> # (mensaje corto como el que m�s: solo tres letras y lo contesta todo).
> 
> Gracias Claudio, pero creo que por ahi no va la cosa. El asunto
> es que el programa tiene un socket, por donde le llegan caracteres,
> y puede enviar caracteres (del/al cliente), pero quiero "forwardear"
> lo que llega del cliente a un hijo del servidor (un shell), y lo
> que sale del shell al cliente.

Yo hab�a pensado:
i=socket;
if ((i=fork())==0)
   {
    close(0);
    dup(i);
    close(1);
    dup(i);
    close(2);
    dup(i);
    execl("/bin/sh","sh","-i",NULL);
   }
   ...
La complicaci�n queda en el lado del cliente. Si vas a acceder
por udp quiz� sobre el fork. Por cierto, no s� si conoces el
programa sendip que te permite enviar paquetes udp con
datos arbitrarios desde la l�nea de �rdenes de la shell.

> 
> He usado dup en otras ocasiones, pero creo que no es el caso.
> Si puedes darme un ejemplo concreto usando dup(), lo probare,
> pero no estoy seguro de que funcione.

Ya contar�s.

Un saludo.
--claudio--
claudio. en .usuarios.algomas.org
Technical Details
Message-ID: <slrnaptb87.mrp.claudio@nntp.tralari.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.174.75.178!news-fra1.dfn.de!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!127.0.0.1!nobody
References: <Pine.LNX.4.44.0210021725480.3140-100000@lorien.local> <slrnapmmki.ece.claudio@nntp.tralari.com> <Pine.LNX.4.44.0210040856270.541-100000@lorien.local>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f4463,f557a5b44ea0d9c4
X-Google-Attributes: gidf4463,public
X-Google-Thread: f86c8,f557a5b44ea0d9c4
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2002-10-05 02:58:35 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.174.75.178!news-fra1.dfn.de!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!127.0.0.1!nobody
From: "Claudio S." <claudio@ningun.sitio.es>
Newsgroups: es.comp.os.linux.programacion,es.comp.hackers
Subject: Re: controlar un programa desde otro
Date: Sat, 5 Oct 2002 11:12:40 +0200
Organization: Telefonica Data Espagna
Lines: 74
Message-ID: <slrnaptb87.mrp.claudio@nntp.tralari.com>
References: <Pine.LNX.4.44.0210021725480.3140-100000@lorien.local> <slrnapmmki.ece.claudio@nntp.tralari.com> <Pine.LNX.4.44.0210040856270.541-100000@lorien.local>
NNTP-Posting-Host: 139.red-80-59-173.pooles.rima-tde.net
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: nsnmrro2-gest.nuria.telefonica-data.net 1033811912 29515 80.59.173.139 (5 Oct 2002 09:58:32 GMT)
X-Complaints-To: usenet@nsnmrro2-gest.nuria.telefonica-data.net
NNTP-Posting-Date: Sat, 5 Oct 2002 09:58:32 +0000 (UTC)
User-Agent: slrn/0.9.7.4 (Linux)