The UNIX and Linux Forums  


Go Back   De Unix-en Linux Forum > Top Forums > UNIX voor Dummies Questions & Answers
.
google unix.com



UNIX voor Dummies Questions & Answers Als u niet zeker weet waar je een Unix-of Linux vraag, post het hier. Alle UNIX-en Linux beginners van harte welkom!!

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
Een programma voor het opsporen van de uitvoering van een ander programma jiten_hegde Hoog Niveau Programmering 3 08-19-2008 06:26
C + + How to use pijp () & vork () met stdin en stdout naar een ander programma vvaidyan Hoog Niveau Programmering 2 05-16-2008 08:30 PM
Hoe duidelijk de inhoud van een pijp (stdin) nadat het is geschreven om een ander programma? vvaidyan Hoog Niveau Programmering 10 05-15-2008 08:08 PM
Hoe te schrijven naar stdin van een ander programma (programma A -> [stdin] programma B) vvaidyan Hoog Niveau Programmering 1 04-30-2008 02:44 PM
Hoe kan ik schrijf process_pool programma? raken Hoog Niveau Programmering 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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 04-30-2008
vvaidyan vvaidyan is offline
Geregistreerde gebruiker
  
 

Join Datum: maart 2008
Posts: 15
Hoe te schrijven naar stdin van een ander programma (programma A -> [stdin] programma B)

Hoi,
Programma A: gebruik pijp ()

Ik kan het lezen van de stdout van Programma B (stdout kreeg via system () commando) in programmeren met:

* Kind
-> Dup2 (fd [1], STDOUT_FILENO);
-> Execl ( "/ pad / PROGRAMMA B", "PROGRAM B", NULL);

* Ouder
-> Char line [100];
-> Lees (fd [0], lijn 100);


Vraag:
---------
Hoe te schrijven naar stdin van PROGRAMMA B vanaf PROGRAM A?
* Moet ik gebruik een andere buis?
* Hoe lees ik stdin in PROGRAM B? met behulp van cin?

Thanks in advance,
Vivek
  #2 (permalink)  
Old 08-02-2008
geducht redoubtable is offline
Geregistreerde gebruiker
  
 

Join Date: Aug 2008
Locatie: Portugal
Posts: 242
/*
* Hier is hoe je het kan doen ...
* Gebruik popen ()
*
# include <sys/types.h>
# include <fcntl.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>

# define LEES 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 (pijp (p_stdin)! \u003d 0 | | pijp (p_stdout)! \u003d 0)
return -1;

pid \u003d fork ();
if (pid <0)
terugkeer pid;
else if (pid \u003d\u003d 0)
(
close (p_stdin [WRITE]);
dup2 (p_stdin [Lees], lezen);
close (p_stdout [Lees]);
dup2 (p_stdout [WRITE], WRITE);
execl ( "/ bin / sh", "sh", "-c", commando, NULL);
perror ( "execl");
exit (1);
)

if (infp \u003d\u003d NULL)
close (p_stdin [WRITE]);
anders
* infp \u003d p_stdin [WRITE];
if (outfp \u003d\u003d NULL)
close (p_stdout [Lees]);
anders
* outfp \u003d p_stdout [Lees];
terugkeer pid;
)

/ *
* Nu in de belangrijkste ... infp zal de stdin (in file descriptor)
* En outfp zal de stdout (out file descriptor)
* Have fun
* /

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

if (popen2 ( "uw-program-B", & infp, & outfp) <\u003d 0)
(
printf ( "Kan uw-programma exec-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);
close (infp);
lezen (outfp, buf, 128);
printf ( "buf \u003d '% s' \ n", buf);
return 0;
)
  #3 (permalink)  
Old 08-02-2008
jim McNamara jim mcnamara is online now Forum Staff  
...@...
  
 

Join Date: Feb 2004
Locatie: NM
Berichten: 5.794
Merk ook op: popen is een manier deal - u kiezen om te schrijven of te lezen van een kind proces, zal popen niet laten u beiden op hetzelfde moment. Anders krijg je in meer interessante en geavanceerde interproces communicatie (IPC) programmering, zoals misschien pijpen.
  #4 (permalink)  
Old 08-02-2008
geducht redoubtable is offline
Geregistreerde gebruiker
  
 

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

Citaat:
Oorspronkelijk geplaatst door jim McNamara View Post
Merk ook op: popen is een manier deal - u kiezen om te schrijven of te lezen van een kind proces, zal popen niet laten u beiden op hetzelfde moment. Anders krijg je in meer interessante en geavanceerde interproces communicatie (IPC) programmering, zoals misschien pijpen.
That's right! De POSIX.1-2001 Functie popen () alleen kan lezen of schrijven, niet beide. Maar als je goed kijkt naar mijn uitvoering, weet ik niet echt gebruik popen (). In plaats daarvan heb ik een popen2 gemaakt () dat twee buizen voor de ouder-proces (INFP, outfp) geopend. Probeer dat met "kat" bijvoorbeeld.


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

Ik schreef en dan lees ik van het kind-proces "uw-program-B"
Closed Thread

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 10:50.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0