![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
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 |
|
||||
|
/*
* 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; ) |
|
||||
|
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.
|
|
||||
|
Citat:
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" |
![]() |
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|