Newsgroup: it.comp.os.linux.development
Titolo: front-end

Salve a tutti,
 qualcuno mi spiega cone funzionano i front-end ?
 Cioe': come si fa da un programma a richiamarne un'altro catturandone
 l'output ? (Ad.es. come fa gwget con wget)
Grazie. 
 
-- 
  ________
 |\      /|
 | \____/ |  Sender:
 |        |  
mimmo....@libero.it
 
 |________|

On Sun, 27 Feb 2000 22:23:06 GMT, Mimmo <mimmo....@NOSPAMlibero.it> wrote:
-> Salve a tutti,
->  qualcuno mi spiega cone funzionano i front-end ?
->  Cioe': come si fa da un programma a richiamarne un'altro catturandone
->  l'output ? (Ad.es. come fa gwget con wget)
-> Grazie. 
Indicativamente posso dirti che si usano le pipe (o almeno questo e' quello che
fa il gtm)
bye
Gianluca
-- 
Home Page                	Contro i brevetti del sw     Boicotta Microsoft
www.infinito.it/utenti/chewbe
 
no-patents.prosa.it/
 
www.boycott-ms.org/
 
"If we have to file a thousand lawsuits a day, we'll do it.
It's less expensive than losing CONTROL of YOUR creative works."
---Jack Valenti, President and CEO, Motion Picture Association of America

 l'output ? (Ad.es. come fa gwget con wget)
non è una cosa proprio banale, 
i passi da seguire sono questi:
il front-end prepara tutti gli argomenti da passare al back-end,
apre una pipe e
redirige l'estremità in lettura sullo standard input,
e l'estremità in scrittura sullo standard output.
a questo punto il processo si forka e il processo figlio
lancia il back-end con tutti i parametri necessari
tramite una funzione della famiglia exec().
ora i due processi (front-end e back-end)
possono comunicare tramite la pipe
però il front-end può solo leggere dalla pipe
mentre il back-end può solo scrivere.
spero di non aver fatto errori,
e da un po' che non tocco questa roba.
se quello che ho detto ti risulta incomprensibile
ti consigli un buon libro di programmazione unix.
se vuoi ti posso spedire un esempio
in c.
ciao ciao

in c.
Magari...


>in c.
il seguente programma stampa l'output del back end,
esegue il comando ls, e l'output viene passato al fron end che lo stampa
a video.
puoi sostituire ls con un altro comando unix che stampi l'output
su standard output.
se non ti è chiaro compra subito un libro di programmazione di sistema in unix,
ne ho visti diversi in libreria dedicati espressamente alla programmazione
di sistema per linux.
compilalo con gcc -o fronte-end front-end.c
/* front-end.c */
#include  <stdio.h>
#include  <unistd.h>
/* il front end lancia il back end e ne stamapa l'output */
void  front_end(char  *path, char  *argv[], char  *envp[])
{
  int  fd[2];
  char  buff[256];
  int  n;
  pipe(fd); /* crea una pipe */
  if (fork() == 0){ /* crea un nuovo processo per il back end */
 
    close(fd[0]); /* chiude la parte in lettura della pipe */
    dup2(fd[1], 1); /* redirige lo stdout del processo appena creato
		       sull'estremità in scrittura della pipe */
 
    execve(path, argv, envp); /* lancia il back end */
  }else{
 
    close(fd[1]); /* chiude l'estremità in scrittura */
    dup2(fd[0], 0); /* redirige lo stdin sulla parte in lettura della pipe */
 
    /* legge su stdin (estremita della pipe in lettura) e scrive 
       su stdout quello che si trova nella pipe finchè  non 
       trova piu caratteri */
 
    n = 1;
    while (n != 0){
      n = read(0, buff, 256);
      write(1, buff, n);
    }   
  }
}
int  main(int argc, char  *argv[], char  *envp[])
{
  front_end("/bin/ls", argv, envp);
}

su standard output.
Grazie.
Me lo studio e... vediamo che ne esce.
-- 
  ________
 |\      /|
 | \____/ |  Sender:
 |        |  
mimmo....@libero.it
 
 a________|