zapan666 Tout est relatif | Bonjour, Je dois réaliser un petit programme qui fait communiquer deux processus : Le processus fils est un simple programme qui mets en majuscule ce qu'il reçoit sur l'entrée standard & ecrit sur la sortie standart la même chose, mais en majuscule. (ça, normalement, ça mache)
Vient ensuite le processus père : il demande juste une chaine de caractère & envoit ça au processus fils, mais j'ai l'impression que la fonction CreateProcess ne redirige pas correctement mes tubes
(c-a-d que le pipe1 doit devenir l'entré standard du processus, & le pipe2 la sortie standard) & du coup ça marche pas... (mon filtre se lance & attend une entrée que je dois fournir au clavier....)
Donc, pensez vous que mon CreateProcess (ligne 22 du main) est mal utilisé ? Si c'est le cas, comment faire pour que mes tubes deviennent les entrées & sorties standard de mon filtre.(Pourtant, j'ai indiqué au CreateProcess de faire hériter les tubes...)
Merci
Code du processus père
Fonction d'écriture dans les tubes
Code :
- BOOL litDansTube( HANDLE pipe, char chaine[LG_MAX], DWORD *taille) {
- int tailleChaine = strlen(chaine);
- return ReadFile (pipe, chaine, tailleChaine*sizeof(char) , taille, NULL);
- }
- BOOL ecritDansTube(HANDLE pipe, char chaine[LG_MAX], DWORD *taille) {
- return WriteFile(pipe, chaine, strlen(chaine) * sizeof(char), taille, NULL);
- }
|
Code :
- int main() {
- DWORD i = 0;
- DWORD taille = 0;
- char chaine[LG_MAX];
- HANDLE lecture1;
- HANDLE ecriture1;
- HANDLE lecture2;
- HANDLE ecriture2;
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- initialisationHandle(&lecture1, &ecriture1);
- initialisationHandle(&lecture2, &ecriture2);
- GetStartupInfo(&si);
- si.hStdInput = lecture1;
- si.hStdOutput = ecriture2;
- if ( !CreateProcess("../fils_win/maj.exe", NULL,
- NULL, NULL,
- TRUE,
- CREATE_NEW_CONSOLE, NULL, NULL,
- &si, &pi)) {
- printf("CreateProcess : Failed" );
- return 1;
- }
- printf("Chaine a mettre en maj ?\n" );
- gets(chaine);
- fprintf(stderr, "Taille de la chaine %s : %d\n", chaine, strlen(chaine));
- if ( !ecritDansTube(ecriture1, chaine, &taille)) {
- fprintf(stderr, "Erreur lors de l'ecriture dans le tube\n" );
- return 1;
- }
- litDansTube(lecture2, chaine, &taille);
- printf("Res : %d \n", chaine);
- fermeHandle(&ecriture1);
- fermeHandle(&lecture1);
- fermeHandle(&ecriture2);
- fermeHandle(&lecture2);
- return 0;
- } // main
|
Message édité par zapan666 le 20-02-2005 à 17:08:18
|