![]() |
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
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 |
|
||||
|
/*
* 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; ) |
|
||||
|
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.
|
|
||||
|
Citazione:
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);
|
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|