[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] execve dju ..



Merci bcp.. entre temps, je suis retombe dessus: popen est ton amis car
il fork, exec et pipe :)

JeF

On Wed, Feb 06, 2002 at 02:50:58PM +0100, Dominique Gallot wrote:
> Petit ex pris de phpdonkey
> 
> #include <stdio.h>
> #include <sys/types.h>
> #include <unistd.h>
> 
> #define LOG_DATEI "d_out.log"
> 
> int main()
> {
>     pid_t pid2,retval;
>     int fd[2];
>     char buffer[10] = "a"; // durch vergrößern des Arrays, kann eventuell
> Systemleistung gespart werden.
>     int n=0;
>     int x=0;
>     FILE *stream;
> 
>     if (pipe(fd)!=0)
>     {
>      printf("konnte pipe nicht öffnen\n");
>      exit(0);
>     }
> 
> Ici copy des descripteurs de fichier pour la partie executant la commande
> ( ici ./donkey )
> 
>     if ((retval=fork())==0)
>     {
>      dup2(fd[1], STDOUT_FILENO);
>      dup2(fd[1], STDERR_FILENO);
>      //dup2(fd[0], STDIN_FILENO);
>      execlp("./donkey",NULL);
>     }
>     else if (retval >0)
>     {
>        n = 1;
>        while (n > 0)
>        {
>          /*
>          if(!x)
>           {
>             x++;
>             strcpy(buffer, "?\n");
>             n = write(fd[0], buffer, strlen(buffer));
>           }
>           */
>          pid2=retval;
>        n = read(fd[0], buffer, sizeof(buffer));
>        buffer[n]=0x00;
>        //printf(">%s",buffer);
>           stream = fopen( LOG_DATEI, "a");
> 
>           if( stream == NULL )
>           {
>              fprintf( stdout, "error on fopen\n" );
>              exit (-3);
>           }
>           fprintf(stream, "%s", buffer);
>           fclose(stream);
>      }
>     }
>     else
>        printf("fork() nicht erfolgreich\n");
> 
>     return 1;
> }
> 
> Hope this help,
> 
> Dominique Gallot
> 
> ----- Original Message -----
> From: "Jean-Francois Dive" <jef@linuxbe.org>
> To: <linux@lists.unixtech.be>
> Sent: Wednesday, February 06, 2002 12:58 PM
> Subject: [linux] execve dju ..
> 
> 
> > Salut a tous,
> >
> > Bon, j'ai un trou et j'arrive pas a retomber sur la chose:
> >
> > je veux executer une commande et recuperer l'output en C (C++, mais
> > ca ne dois pas changer grand chose).
> >
> > Bon, d'un cote, je dois avoir un fork() puis execve(ma commande), mais
> > comment lire l'output. J'imagine que je dois jouer avec les descripteurs
> > mais.. bon.
> >
> > JeF
> >
> > --
> > -> Jean-Francois Dive
> > --> jef@linuxbe.org
> > _______________________________________________
> > Linux Mailing List
> > Archives: http://unixtech.be/mailman/listinfo/linux
> >
> 

-- 
-> Jean-Francois Dive
--> jef@linuxbe.org
_______________________________________________
Linux Mailing List
Archives: http://unixtech.be/mailman/listinfo/linux