Newsgroup: it.comp.os.linux.development
Titolo: [HELP] [semplice ma non ci riesco...] comunicazione tra processi

In generale sto facendo molte prove con vari metodi ma ancora non riesco a 
fare comunicare un mio prog. con uno già esistente che scrive su stdin e 
legge da stdout _interattivamente_  ...ma come si può fare??? Ci sto 
provando ma non ci riesco...
MYPROG ==[request]==> SPICE (elaborating....)
  /\                            ||
  ||                            ||
  ===============================
(spice è un programma interattivo che scrive delle linee appena avviato e 
poi ha un prompt dei comandi (quindi prende input da stdin e scrive il 
risultato su stdout)).
Ho messo "rt+" nell'apertura della pipe (d'appertutto ho letto che la 
modalità è la stessa dei file) ma mi dà segm.fault appena prova a leggere 
con fgets.
(Ho fatto altre prove...usando solo "r" effettivamente legge le prime righe 
che escono dall'esecuzione dal programma...ma poi come gli scrivo io per 
dargli dei comandi di cui leggere il successivo output???)
  FILE *fp;
  char line[130];                       
  fp = popen("spice var.cir -i", "rt+");                
  while ( fgets( line, sizeof line, fp))
  {
    printf("%s", line);
  }
  pclose(fp);
ciao e grazie a tutti.
-- 
__________________________________
"Ama e fai ciò che vuoi".... 
__________________________________

ops...scusate ho sbagliato ng...
avevo cliccato qui perchè precedentemente avevo fatto una stessa domanda 
(sempre per lo stesso problema) ma stavo cercando di risolverla da prompt 
dei comandi.
cmq...se ci fosse qualcuno qui che mi può aiutare... non disprezzo ;)
ciao!


 dargli dei comandi di cui leggere il successivo output???)
Da "man popen" (RedHat 7.2):
DESCRIPTION
       The  popen() function opens a process by creating a pipe, forking,
       and invoking the shell.  Since a pipe is by
       definition unidirectional, the type argument may specify
       only reading or  writing,  not  both;  the  resulting
       stream is correspondingly read-only or write-only.
       The  command  argument is a pointer to a null-terminated
       string containing a shell command line.  This command
       is passed to /bin/sh using the -c flag; interpretation,
       if any, is performed by the shell.  The mode  argument
       is a pointer to a null-terminated string which must be
       either `r' for reading or `w' for writing.
Quindi:
1) il modo puo` essere solo "r" o "w"
2) una pipe puo` essere solo read o write per un dato processo
Che ne diresti di usare un socketpair?
Ciao,
-- 
       Roberto Divia`             Love at first sight is one of the greatest
       =============             labour-saving devices the world has ever seen.
Mailbox: C02110                 CERN-European Organization for Nuclear Research
E-mail: 
Robert...@cern.ch
           CH-1211 GENEVE 23, Switzerland

 Ciao,
Ciao e grazie.


 socketpair....le sto provando tutte... :(
Visto che sei in vena, guarda questo:
$ ls -l
total 12
prw-r--r--    p
-rwxr-xr-x    t1
-rwxr-xr-x    t2
$ cat t1
n=1
echo $n
while true; do
  read n
  if [ "$n" ]; then
    n=`expr $n \+ 1`
    echo $n
  fi
done
$ cat t2
while true; do
  read n
  if [ "$n" ]; then
    echo $n
    echo $n >result
  fi
done
$ t1 <p | t2 >p &
[1] 31555
$ cat result 
168
$ cat result 
294
$ cat result 
399
$ kill %%
$ cat result 
564
[1]+  Terminated              t1 <p | t2 >p
Potrebbe essere una possibilita`... La named pipe e` usata per la
comunicazione in un senso mentre la pipe anonima e` usata per la
comunicazione nell'altro senso.


 Ciao,
Ciao...


 Ti ringrazio ancora... ora provo con la fork....
Buona fortuna.


 Buona fortuna.
mamma mia quante me ce ne vuole...
magari tra un mesetto dovrai dirmi "In Bocca al Lupo", perň!!!
Ciao e infinitamente grazie...
P.S.
Ti manderň il mio CV...ti sarň debitore di un grosso aiuto...se becchi 
qualcosa su cui ti posso aiutare ;DD
(come avrai capito questo tipo di programmazione non mi esalta 
proprio...anzi! perň č necessario ora).
-- 
__________________________________
"Ama e fai ciň che vuoi".... 
__________________________________