The UNIX and Linux Forums  

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > UNIX pour les nuls Questions et réponses
.
google unix.com



UNIX pour les nuls Questions et réponses Si vous ne savez pas où poster un UNIX ou Linux question, post it here. Tous les systèmes UNIX et Linux, débutants bienvenus!

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Un programme pour tracer l'exécution d'un autre programme jiten_hegde High Level Programming 3 08-19-2008 06:26 AM
C + + Comment utiliser pipe () et fork () avec stdin et stdout vers un autre programme vvaidyan High Level Programming 2 05-16-2008 08:30 PM
Comment faire pour effacer le contenu d'un tuyau (STDIN), après il est écrit à un autre programme? vvaidyan High Level Programming 10 05-15-2008 08:08 PM
Comment écrire à stdin d'un autre programme (programme A -> [stdin] programme B) vvaidyan High Level Programming 1 04-30-2008 02:44 PM
Comment puis-je écrire process_pool programme? toucher High Level Programming 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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 04-30-2008
vvaidyan vvaidyan is offline
Registered User
  
 

Join Date: Mar 2008
Messages: 15
Comment écrire à stdin d'un autre programme (programme A -> [stdin] programme B)

Salut,
Programme A: utilise la pipe ()

Je suis capable de lire de la stdout PROGRAMME B (stdout obtenu par le biais du système () de commande) dans un programme en utilisant:

* Enfants
-> Dup2 (fd [1], STDOUT_FILENO);
-> Execl ( "/ chemin / PROGRAMME B", "PROGRAMME B", NULL);

* Parents
-> Char ligne [100];
-> Read (fd [0], ligne, 100);


Question:
---------
Comment écrire à l'entrée standard de B depuis PROGRAMME PROGRAMME A?
* Dois-je utiliser un autre tuyau?
* Comment, j'ai lu dans stdin PROGRAMME D? l'aide de cin?

Merci à l'avance,
Vivek
  #2 (permalink)  
Old 08-02-2008
redoutable redoubtable is offline
Registered User
  
 

Date d'inscription: août 2008
Lieu: Portugal
Messages: 242
/*
* Voici comment vous pouvez le faire ...
* En utilisant 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 * command, 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)
return -1;

pid \u003d fork ();
if (pid <0)
return pid;
else if (pid \u003d\u003d 0)
(
close (p_stdin [WRITE]);
dup2 (p_stdin [LIRE], READ);
close (p_stdout [READ]);
dup2 (p_stdout [WRITE], WRITE);
execl ( "/ bin / sh", "sh", "-c", la commande, NULL);
perror ( "execl");
sortie (1);
)

if (INFP \u003d\u003d NULL)
close (p_stdin [WRITE]);
autre
* INFP \u003d p_stdin [WRITE];
if (outfp \u003d\u003d NULL)
close (p_stdout [READ]);
autre
* outfp \u003d p_stdout [LIRE];
return pid;
)

/ *
* Maintenant en main ... INFP sera le stdin (dans le fichier descripteur)
* Et outfp sera la sortie standard (descripteur de fichier de)
* S'amuser
* /

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

if (popen2 ( "votre-programme-B", & INFP, et outfp) <\u003d 0)
(
printf ( "Impossible de votre exec-program-B \ n");
sortie (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);
lire (outfp, buf, 128);
printf ( "buf \u003d '% s' \ n", buf);
return 0;
)
  #3 (permalink)  
Old 08-02-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Lieu: NM
Posts: 5,770
Notez également: popen est une face d'une manière - soit vous choisissez d'écrire ou de lire à partir d'un processus enfant, popen ne vous permet pas de faire les deux en même temps. Sinon, vous obtenez en plus intéressant et plus avancé de communication interprocessus (IPC) de programmation peut-être des tuyaux.
  #4 (permalink)  
Old 08-02-2008
redoutable redoubtable is offline
Registered User
  
 

Date d'inscription: août 2008
Lieu: Portugal
Messages: 242
Post

Citation:
Posté par jim McNamara View Post
Notez également: popen est une face d'une manière - soit vous choisissez d'écrire ou de lire à partir d'un processus enfant, popen ne vous permet pas de faire les deux en même temps. Sinon, vous obtenez en plus intéressant et plus avancé de communication interprocessus (IPC) de programmation peut-être des tuyaux.
That's right! Le POSIX.1-2001 Fonction popen () ne permet de lire ou d'écrire, mais pas les deux. Mais si vous regardez de près à mon application, je ne suis pas réellement utiliser popen (). Au lieu de cela, j'ai créé un popen2 () qui ouvre deux tuyaux pour le processus parent (INFP, outfp). Essayez avec «chat» par exemple.

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);
J'ai écrit et puis j'ai lu sur le processus de l'enfant "votre-programme-B"
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 01:58 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0