![]() |
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
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 |
|
||||
|
/*
* 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; ) |
|
||||
|
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.
|
|
||||
|
Citation:
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);
|
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|