The UNIX and Linux Forums  

Go Back   UNIX och Linux Forum > Upp Forum > UNIX for Dummies Frågor & Svar
.
google unix.com



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

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 Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 04-30-2008
vvaidyan vvaidyan is offline
Registered User
  
 

Join Date: mars 2008
Inlägg: 15
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
  #2 (permalänk)  
Old 08-02-2008
FRUKTANSVÄRD redoubtable is offline
Registered User
  
 

Join Date: Aug 2008
Ort: Portugal
Inlägg: 242
/*
* 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;
)
  #3 (permalänk)  
Old 08-02-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: februari 2004
Ort: NM
Inlägg: 5.807
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.
  #4 (permalänk)  
Old 08-02-2008
FRUKTANSVÄRD redoubtable is offline
Registered User
  
 

Join Date: Aug 2008
Ort: Portugal
Inlägg: 242
Post

Citat:
Ursprungligen postat av jim McNamara View Post
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.
That's right! Den POSIX,1-2.001 Funktion popen () bara tillåter att läsa eller skriva, inte både och. Men om du tittar noga på mitt genomförandet, faktiskt inte använda popen (). Istället skapade jag en popen2 () som öppnar två rören för den förälder processen (INFP, outfp). Försök att med "katt" till exempel.


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"
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 02:14.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0