The UNIX and Linux Forums  

Go Back   El UNIX y Linux Foros > Arriba Foros > UNIX for Dummies Preguntas y Respuestas
.
google unix.com



UNIX for Dummies Preguntas y Respuestas Si no está seguro de que para publicar un UNIX o Linux cuestión, puesto que aquí. Todos los novatos en Linux, UNIX y bienvenida!

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
Un programa para rastrear la ejecución de otro programa jiten_hegde Programación de Alto Nivel 3 08-19-2008 06:26 AM
C + + Cómo usar la cañería () y tenedor () con stdin y stdout a otro programa vvaidyan Programación de Alto Nivel 2 05-16-2008 08:30 PM
Cómo borrar el contenido de un tubo (STDIN) después de que se escribe en otro programa? vvaidyan Programación de Alto Nivel 10 05-15-2008 08:08 PM
¿Cómo escribir en stdin de otro programa (programa A -> [stdin] programa B) vvaidyan Programación de Alto Nivel 1 04-30-2008 02:44 PM
¿Cómo puedo escribir process_pool programa? golpear Programación de Alto Nivel 4 06-17-2002 04:36 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 04-30-2008
vvaidyan vvaidyan is offline
Usuario Registrado
  
 

Fecha: marzo 2008
Puestos: 15
¿Cómo escribir en stdin de otro programa (programa A -> [stdin] programa B)

Hola,
Programa A: uso de tuberías ()

Soy capaz de leer el stdout de PROGRAMA B (stdout obtuvo a través de sistema () de comandos) en un programa usando:

* Niño
-> Dup2 (fd [1], STDOUT_FILENO);
-> Execl ( "/ ruta / PROGRAMA B", "Programa B", NULL);

* Padres
-> Char line [100];
-> Leer (fd [0] de la partida, 100);


Pregunta:
---------
¿Cómo escribir en stdin de PROGRAMA PROGRAMA B desde A?
* Debo usar un tubo?
* Cómo he leído en stdin PROGRAMA B? utilizando cin?

Gracias de antemano,
Vivek
  #2 (Enlace permanente)  
Old 08-02-2008
temible redoubtable is offline
Usuario Registrado
  
 

Fecha: agosto 2008
Localización: Portugal
Puestos: 242
/*
* Te indicamos cómo hacerlo ...
* Usando popen ()
*
# include <sys/types.h>
# include <fcntl.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>

# define LEER 0
# define ESCRIBIR 1

pid_t
popen2 (const char * comando, int * INFP, int * outfp)
(
int p_stdin [2], p_stdout [2];
pid_t pid;

if (pipe (p_stdin)! \u003d 0 | | tubería (p_stdout)! \u003d 0)
return -1;

pid \u003d tenedor ();
if (pid <0)
pid retorno;
else if (pid \u003d\u003d 0)
(
estrecha (p_stdin [ESCRIBIR]);
dup2 (p_stdin [READ], LEA);
estrecha (p_stdout [LEER]);
dup2 (p_stdout [ESCRIBIR], ESCRIBIR);
execl ( "/ bin / sh", "sh", "-c", comando, NULL);
perror ( "execl");
exit (1);
)

if (INFP \u003d\u003d NULL)
estrecha (p_stdin [ESCRIBIR]);
algo más
* \u003d p_stdin INFP [ESCRIBIR];
if (outfp \u003d\u003d NULL)
estrecha (p_stdout [LEER]);
algo más
* outfp \u003d p_stdout [LEER];
pid retorno;
)

/ *
* Ahora en los principales ... INFP se stdin (en el descriptor de archivo)
* Y outfp será la stdout (descriptor de archivo a)
* Divertirse
* /

int
main (int argc, char ** argv)
(
int INFP, outfp;
char buf [128];

if (popen2 ( "su-programa-B", y INFP, y outfp) <\u003d 0)
(
printf ( "No se puede ejecutar su programa-B \ n");
exit (1);
)

memset (buf, 0x0, sizeof (buf));

escribir (INFP, "Z \ n", 2);
escribir (INFP, "D \ n", 2);
escribir (INFP, "A \ n", 2);
escribir (INFP, "C \ n", 2);
estrecha (INFP);
leer (outfp, buf, 128);
printf ( "buf \u003d '% s' \ n", buf);
return 0;
)
  #3 (Enlace permanente)  
Old 08-02-2008
Jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Fecha: febrero 2004
Ubicación: NM
Mensajes: 5.763
También tenga en cuenta: es un popen tratar de una manera - que elija, ya sea para escribir o para leer desde un proceso hijo, popen no le permiten hacer las dos cosas al mismo tiempo. De lo contrario, llegar a más interesantes y avanzadas de la comunicación (IPC), la programación como tal vez las tuberías.
  #4 (Enlace permanente)  
Old 08-02-2008
temible redoubtable is offline
Usuario Registrado
  
 

Fecha: agosto 2008
Localización: Portugal
Puestos: 242
Post

Cita:
Publicado originalmente por Jim McNamara View Post
También tenga en cuenta: es un popen tratar de una manera - que elija, ya sea para escribir o para leer desde un proceso hijo, popen no le permiten hacer las dos cosas al mismo tiempo. De lo contrario, llegar a más interesantes y avanzadas de la comunicación (IPC), la programación como tal vez las tuberías.
¡Así es! El POSIX.1-2001 Función popen () sólo permite leer ni escribir, pero no ambas. Pero si se mira de cerca a mi aplicación, no utilizan popen (). En lugar de ello, he creado un popen2 () que se abre dos tubos para el proceso padre (INFP, outfp). Prueba de que con "gato", por ejemplo.

Código:
if (popen2("your-program-B", &infp, &outfp) <= 0)
        {
        printf("Unable to exec your-program-B\n");
        exit(1);
        }

        memset (buf, 0x0, sizeof(buf));

/* 
 * writing to stdin here
 */
        write(infp, "Z\n", 2);
        write(infp, "D\n", 2);
        write(infp, "A\n", 2);
        write(infp, "C\n", 2);
        close(infp);
/*
 * reading stdout here
 */
        read(outfp, buf, 128);
        printf("buf = '%s'\n", buf);
Escribí y luego leí en el proceso hijo "de su programa-B"
Closed Thread

Marcadores

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 09:13 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0