The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > UNIX for dummyer Spørgsmål & svar
.
google unix.com



UNIX for dummyer Spørgsmål & svar Hvis du ikke ved, hvor man skal sende en UNIX-eller Linux-spørgsmål, efter det her. Alle UNIX og Linux newbies velkommen!

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Et program til at spore udførelsen af et andet program jiten_hegde Højtstående Programmering 3 08-19-2008 06:26 AM
C + + Sådan bruges pipe () & fork () med stdin og Stdout til et andet program vvaidyan Højtstående Programmering 2 05-16-2008 08:30 PM
Hvordan kan jeg fjerne det indholdet af et rør (STDIN), efter at den er skrevet til et andet program? vvaidyan Højtstående Programmering 10 05-15-2008 08:08 PM
Hvordan man skriver til stdin af et andet program (program A -> [stdin] program B) vvaidyan Højtstående Programmering 1 04-30-2008 02:44 PM
Hvordan kan jeg skrive process_pool program? ramme Højtstående Programmering 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 Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 04-30-2008
vvaidyan vvaidyan is offline
Registreret Bruger
  
 

Join Date: Mar 2008
Stillinger: 15
Hvordan man skriver til stdin af et andet program (program A -> [stdin] program B)

Hej,
Program A: anvendelser pipe ()

Jeg er i stand til at læse Stdout af PROGAM B (Stdout fik igennem systemet () kommando) i programmere en bruger:

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

* Moderselskab
-> Char line [100];
-> Læs (fd [0], linje, 100);


Spørgsmål:
---------
Hvordan man skriver til stdin af PROGRAM B fra program A?
* Skal jeg bruge et andet rør?
* Hvordan jeg læste stdin i PROGRAM B? bruger cin?

Thanks in advance,
Vivek
  #2 (permalink)  
Old 08-02-2008
frygtindgydende redoubtable is offline
Registreret Bruger
  
 

Join Date: Aug 2008
Beliggenhed: Portugal
Posts: 242
/*
* Her, hvordan du kan gøre det ...
* Hjælp 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 * 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)
returnere -1;

pid \u003d fork ();
if (PID <0)
tilbagevenden pid;
ellers hvis (pid \u003d\u003d 0)
(
tæt (p_stdin [WRITE]);
dup2 (p_stdin [læs], READ);
tæt (p_stdout [læs]);
dup2 (p_stdout [WRITE], SKRIVE);
execl ( "/ bin / sh", "sh", "-c", kommando, NULL);
perror ( "execl");
exit (1);
)

if (infp \u003d\u003d NULL)
tæt (p_stdin [WRITE]);
anden
* infp \u003d p_stdin [WRITE];
if (outfp \u003d\u003d NULL)
tæt (p_stdout [læs]);
anden
* outfp \u003d p_stdout [læs];
tilbagevenden pid;
)

/ *
* Nu i hovedsagen ... INFP vil være stdin (i filen deskriptor)
* Og outfp vil være stdout (ud file descriptor)
* Have det sjovt
* /

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

if (popen2 ( "dit-program-B", & INFP, & outfp) <\u003d 0)
(
printf ( "Unable to exec din-program-B \ n");
exit (1);
)

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

skrive (INFP, "Z \ n", 2);
skrive (INFP, "D \ n", 2);
skrive (INFP, "A \ n", 2);
skrive (INFP, "C \ n", 2);
tæt (infp);
læse (outfp, buf, 128);
printf ( "buf \u003d '% s' \ n", buf);
tilbagevenden 0;
)
  #3 (permalink)  
Old 08-02-2008
jim McNamara jim mcnamara is online now Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.805
Bemærk også: popen er en måde at håndtere - du vælge enten at skrive til eller læse fra et barn proces, vil popen lader dig ikke gøre begge dele på samme tid. Ellers får du i mere interessant og avancerede InterProcess kommunikation (IPC) programmering som måske rør.
  #4 (permalink)  
Old 08-02-2008
frygtindgydende redoubtable is offline
Registreret Bruger
  
 

Join Date: Aug 2008
Beliggenhed: Portugal
Posts: 242
Post

Citat:
Oprindeligt Indsendt af jim McNamara View Post
Bemærk også: popen er en måde at håndtere - du vælge enten at skrive til eller læse fra et barn proces, vil popen lader dig ikke gøre begge dele på samme tid. Ellers får du i mere interessant og avancerede InterProcess kommunikation (IPC) programmering som måske rør.
That's right! Den POSIX,1-2.001 Funktion popen () kun giver mulighed for at læse eller skrive, ikke begge dele. Men hvis man ser nøje på min gennemførelse, kan jeg faktisk ikke bruge popen (). Stedet, jeg oprettet et popen2 (), der åbner to rør til den forælder-processen (INFP, outfp). Prøv at med "kat" for eksempel.


Code:
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);

Jeg skrev og så læste jeg fra barnet processen "din-program-B"
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 05:25 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0