![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| UNIX for Dummies Frågor & Svar Om du inte är säker på var att skriva en UNIX eller Linux fråga efter det här. Alla UNIX-och Linux-nybörjare välkomna! |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Ett program för att spåra verkställigheten av ett annat program | jiten_hegde | High Level Programming | 3 | 08-19-2008 06:26 |
| C + + Hur använder pipe () & bord () med stdin och stdout till ett annat program | vvaidyan | High Level Programming | 2 | 05-16-2008 08:30 |
| Hur man rensa innehållet i röret (STDIN) efter att det har skrivit till ett annat program? | vvaidyan | High Level Programming | 10 | 05-15-2008 08:08 |
| Hur man skriver till stdin av ett annat program (program A -> [stdin] program B) | vvaidyan | High Level Programming | 1 | 04-30-2008 02:44 |
| Hur kan jag skriva process_pool programmet? | slå | High Level Programming | 4 | 06-17-2002 04:36 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Hur man skriver till stdin av ett annat program (program A -> [stdin] program B)
Hej,
Program A: använder pipe () Jag kan läsa stdout av PROGAM B (stdout gått fram system ()-kommando) till PROGRAM A med: * Barn -> Dup2 (fd [1], STDOUT_FILENO); -> Execl ( "/ path / PROGRAM B", "PROGRAM B", NULL); * Förälder -> Char line [100]; -> Read (fd [0], linje, 100); Fråga: --------- Hur man skriver till stdin för PROGRAM B PROGRAM A? * Ska jag använda en annan pipa? * Att jag läser stdin i PROGRAM B? använder cin? Tack på förhand Vivek |
|
||||
|
/*
* Här kan du göra det ... * Använda popen () * # include <sys/types.h> # include <fcntl.h> # include <stdio.h> # include <stdlib.h> # include <unistd.h> # define LÄS 0 # define SKRIVA 1 pid_t popen2 (const char * kommando, 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) återgå -1; pid \u003d gaffelgrepp (); if (pid <0) återgå pid; else if (pid \u003d\u003d 0) ( nära (p_stdin [SKRIVA]); dup2 (p_stdin [LÄS], LÄS); nära (p_stdout [LÄS]); dup2 (p_stdout [SKRIVA] SKRIVA); execl ( "/ bin / sh", "sh", "-c", kommando, NULL); perror ( "execl"); exit (1); ) if (infp \u003d\u003d NULL) nära (p_stdin [SKRIVA]); annan * infp \u003d p_stdin [SKRIVA]; if (outfp \u003d\u003d NULL) nära (p_stdout [LÄS]); annan * outfp \u003d p_stdout [LÄS]; återgå pid; ) / * * Nu i main ... INFP blir stdin (i Fildeskriptor) * Och outfp blir stdout (out Fildeskriptor) * Skoja * / int viktigaste (int argc, char ** argv) ( int infp, outfp; char buf [128]; if (popen2 ( "din-program-B", & INFP, & outfp) <\u003d 0) ( printf ( "Kunde inte exec din-program-B \ n"); exit (1); ) memset (buf, 0x0, sizeof (buf)); write (INFP, "Z \ n", 2); write (INFP, "D \ n", 2); write (INFP, "A \ n", 2); write (INFP, "C \ n", 2); nära (infp); read (outfp, buf, 128); printf ( "buf \u003d '% s' \ n", buf); return 0; ) |
|
||||
|
Notera också: popen är ett sätt hantera - du antingen välja att skriva till eller läsa från ett barn process kommer popen inte låta dig göra båda sakerna samtidigt. Annars får du in mer intressanta och avancerade interprocesskommunikation (IPC) programmering som kanske rör.
|
|
||||
|
Citat:
Kod:
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);
Jag skrev och sedan läste jag från barnets process "din-program-B" |