Newsgroup: it.comp.os.linux.development
Titolo: Fork e dati

Ciao a tutti
Sto provando da qualche giorno ad usare la funzione fork del C, vorrei
poter capire come poter condividere delle variabili fra i due
processi, padre e figlio, qualcuno sa darmi una mano?

 processi, padre e figlio, qualcuno sa darmi una mano?
non puoi "condividerle", il figlio eredita quelle esistenti dal padre poi
in ogni processo ognuna prende la sua strada.
se vuoi condividere variabili tra due processi diversi, usa la shared
memory
cfr:
man shmget - shmctl - shmat - shmdt

mi presti fare qualche esempio ? grazie

 writes:

quindi il problema e' IPC.  puoi usare shared memory, pipes, sockets;
e leggere qualche buon testo sulla inter-process communications sotto
unix, tipo lo stevens (un classico).
-- 
|   Maurizio Loreti -- 
ROT13:ybe...@cq.vasa.vg
   |  (@_
| Un. of Padova, Dept. of Physics, Padova, Italy |  //\
|     
http://www.pd.infn.it/~loreti/mlo.html
     |  V_/_

 wrote:


 Scusa, avresti voglia di darmi qualche link?
volentieri - quanto di meglio ci sia:
  W. Richard Stevens e Stephen A. Rago
  Advanced Programming in the UNIX Environment (2nd Edition)
  Addison-Wesley Professional Computing Series
  ISBN 978-0201433074
  960 pagine
  US$ 54.40 + shipping (su 
www.amazon.com
)



Se devi condividere variabili forse sbagli strada ed hai bisogno di 
creare dei thread e non sdoppiare un processo con fork.
man pthread_create
... per iniziare :)
Bye,
  Gabry

In giro qua e la per la rete ho trovato qualche breve spiegazione
sull'utilizzo della PIPE, ma non ho capito bene come debba essere
usata oppure ho recuperato pochissime informazioni su l'utilizzo di
queste funzioni: shmget,shmat,shmdt e shmctl
Da quel poco che ho capito potrebbero esseremi utili ma non riesco ad
usarle.
Sto continuando a sbagliare strada secondo te?
On 19 Set, 17:32, Gabriele Greco


 
secondo me sě, quello dell'IPC non č certo un argomento nel quale si possa 
andare a tentativi! sei sicuro che la strada che hai scelto sia la piů 
semplice? nella mia esperienza mi sono reso conto che il piů delle volte č 
poossibile evitare processi e/o thread multipli. Tu cosa devi fare?
-- 
SF
Dildo, contro il logorio della vita moderna.

 Dildo, contro il logorio della vita moderna.
Avrei bisongo di inviare dei, che per colpa di problemi che al momento
non posso risolvere, impiego molto tempo a  spedire, nel frattempo
vorrei poter fare in modo che il mio programma vada a controllare una
serie di altre cose e che quando l'invio dei dati sia terminato con
successo il processo padre, lo chiamo cosi per ora, possa rendersi
conto che qui dati sono stati inviati e possa quindi proseguire in una
determinata maniera.
Non so se mi sono spiegato bene

 
Sě, piů o meno. Cosě su due piedi mi vengono in mente select() e socket 
non-bloccanti, che ti permettono di eliminare multithreading, IPC e lazzi vari.


 Dildo, contro il logorio della vita moderna.
Non li ho mai usati mi sai dire dove posso trovare qualche indicazione?

 
google può! :-)



wrote:

In effetti! :-)
Se ho dubbi o non capisco magari posto qualche altro messaggio qua

 
comunque starai lavorando su piattaforma linux no? e allora comincia da
man select
man 7 socket



Puoi provare con waitpid().
Definendo opportunamente gli 'exit code' del processo figlio puoi 
ritornare al padre il risultato delle operazioni.  Devi solo 
preoccuparti che il padre testi periodicamente se il processo è terminato.
$ man waitpid
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >


wrote:

si su un sistema linux embedded


wrote:

si su un sistema linux embedded

fede wrote:

Questo potrebbe essere un problema, non tutto viene portato (per ragioni di
spazio).
Comunque qui' trovi tutto quello che ti serve:
http://www.lilik.it/~mirko/gapil/gapil.html
Vedi il capitolo 12 "La comunicazione fra processi", ci sono parecchi esempi
ed e' in italiano :)
Nicola.
-- 
chi va pian va san e va lontan