The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > UNIX for Dummies Domande & Risposte
.
google unix.com



UNIX for Dummies Domande & Risposte Se non sei sicuro dove pubblicare un UNIX o Linux domanda, posta da qui. Tutti i neofiti di Linux e UNIX benvenuto!

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Un programma per tracciare l'esecuzione di un altro programma jiten_hegde Di programmazione ad alto livello 3 08-19-2008 05:26 AM
C + + Come utilizzare il tubo () & fork () con stdin e stdout di un altro programma vvaidyan Di programmazione ad alto livello 2 05-16-2008 07:30 PM
Come cancellare il contenuto di un tubo (STDIN) dopo che è stato scritto per un altro programma? vvaidyan Di programmazione ad alto livello 10 05-15-2008 07:08 PM
Come scrivere a stdin di un altro programma (il programma A -> [stdin] programma B) vvaidyan Di programmazione ad alto livello 1 04-30-2008 01:44 PM
Come faccio a scrivere process_pool programma? colpire Di programmazione ad alto livello 4 06-17-2002 03: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 Thread Tools Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 04-30-2008
vvaidyan vvaidyan is offline
Utente Registrato
  
 

Iscriviti Data: marzo 2008
Interventi: 15
Come scrivere a stdin di un altro programma (il programma A -> [stdin] programma B)

Salve,
Programma A: utilizza il tubo ()

Sono in grado di leggere il stdout di PROGAM B (stdout ottenuto mediante sistema () comando) in PROGRAMMA A utilizzando:

* Bambini
-> Dup2 (fd [1], STDOUT_FILENO);
-> Execl ( "/ path / PROGRAMMA B", "PROGRAMMA B", NULL);

* Madre
-> Char line [100];
-> Read (fd [0], linea, 100);


Domanda:
---------
Come scrivere a stdin di B dal PROGRAMMA PROGRAMMA A?
* Dovrebbe utilizzare un altro tubo?
* Come ho letto in stdin PROGRAMMA B? utilizzando cin?

Grazie in anticipo,
Vivek
  #2 (permalink)  
Old 08-02-2008
redoubtable redoubtable is offline
Utente Registrato
  
 

Join Date: Aug 2008
Posizione: Portogallo
Interventi: 242
/*
* Ecco come si può fare ...
* Utilizzando popen ()
*
# include <sys/types.h>
# include <fcntl.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>

# define READ 0
# define WRITE 1

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

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

pid \u003d fork ();
if (pid <0)
return pid;
else if (pid \u003d\u003d 0)
(
close (p_stdin [WRITE]);
dup2 (p_stdin [leggi], LEGGERE);
close (p_stdout [leggi]);
dup2 (p_stdout [WRITE], scrivere);
execl ( "/ bin / sh", "sh", "-c", comando, NULL);
perror ( "execl");
exit (1);
)

if (infp \u003d\u003d NULL)
close (p_stdin [WRITE]);
altro
* infp \u003d p_stdin [SCRIVI];
if (outfp \u003d\u003d NULL)
close (p_stdout [leggi]);
altro
* outfp \u003d p_stdout [leggi];
return pid;
)

/ *
* Ora nelle principali ... infp sarà il stdin (nel descrittore di file)
* E outfp sarà stdout (su un descrittore di file)
* Divertirsi
* /

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

if (popen2 ( "il-tuo-programma-B", e infp, & outfp) <\u003d 0)
(
printf ( "Impossibile eseguire il vostro programma-B \ n");
exit (1);
)

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

scrivere (infp, "Z \ n", 2);
scrivere (infp, "D \ n", 2);
scrivere (infp, "A \ n", 2);
scrivere (infp, "C \ n", 2);
close (infp);
leggere (outfp, buf, 128);
printf ( "buf \u003d '% s' \ n", buf);
return 0;
)
  #3 (permalink)  
Old 08-02-2008
Jim McNamara jim mcnamara is online now Forum Staff  
...@...
  
 

Iscriviti Data: febbraio 2004
Ubicazione: MN
Messaggi: 5.748
Si noti inoltre: popen è un modo affrontare - si scegliere di scrivere o leggere da un processo figlio, popen non ti permettono di fare entrambe le cose allo stesso tempo. In caso contrario, si ottiene in più interessante e interprocess avanzati di comunicazione (IPC) di programmazione come per esempio i tubi.
  #4 (permalink)  
Old 08-02-2008
redoubtable redoubtable is offline
Utente Registrato
  
 

Join Date: Aug 2008
Posizione: Portogallo
Interventi: 242
Post

Citazione:
Originalmente inviato da Jim McNamara View Post
Si noti inoltre: popen è un modo affrontare - si scegliere di scrivere o leggere da un processo figlio, popen non ti permettono di fare entrambe le cose allo stesso tempo. In caso contrario, si ottiene in più interessante e interprocess avanzati di comunicazione (IPC) di programmazione come per esempio i tubi.
That's right! Il POSIX,1-2.001 Funzione popen (), solo permette di leggere o scrivere, non entrambi. Ma se si guarda da vicino al mio attuazione, non ho fatto uso popen (). Invece, ho creato uno popen2 () che apre due tubi per il processo padre (infp, outfp). Prova che con il "gatto", per esempio.

Codice:
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);
Ho scritto e poi ho letto da bambino il processo "programma-il-tuo-B"
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 07:12 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0