Newsgroup: it.comp.os.linux.development
Titolo: fork

qualche anima pia potrebbe spiegarmi in parole povere come si usa la
funzione fork e se con questa è possibile costruire un programma di grafica
3D in tempo reale  con la relativa procedura di generazione sonora?
Allora io hao gia un prg che fa la parte grafica, ed uno che si occupa del
suono, con fork è possibile mandare in escuzione entrambi in due task
diversi? I due Tasck possono colloquiare , magare attranerso un vettore od
un file? quali sono le scelte + efficenti?
Grazie Drake.

file? quali sono le scelte + efficenti?
Una fork() semplicemente  crea un secondo processo in tutto  e per tutto
uguale al  primo, a differenza del  PID restituito dalla funzione:  0 al
processo nuovo,  e il PID  del "figlio" al  processo che ha  chiamato la
fork(). Cosa fare poi, e` scelta tua. In genere si usa
    if (pid > 0)
    {
        esegui_codice_del_padre();
    }
    else if (pid == 0)
    {
        esegui_codice_del_figlio();
	/* in genere qui si chiama una exec() */
    }
    else
    {
        exit(1);
	/* la fork() e` fallita */
    }
Il metodo piu` efficiente che io conosca per far comunicare due processi
(che non e` detto  che sia il metodo piu` efficiente  in assoluto) e` la
pipe(). Il concetto  e` che un pipe altro non  e` che un file-descriptor
su cui un  processo scrive e l'altro processo legge,  ma *senza* passare
dal disco (come invece faceva  il DOS). Occhio, perche` bisogna chiamare
la pipe() prima della fork() per far si` che i due processi comunichino:
qualunque cosa tu faccia *dopo* la fork(), i due processi che hai creato
non la possono  condividere, perche` hanno gia` iniziato  la loro "vita"
indipendente.
Altri programmatori piu` esperti sapranno comunque suggerirti metodi per
condividere la memoria tra due processi: so che si puo` fare con mmap(),
ma non so come perche` non ci ho mai provato.
-- 
  _      ___ ____
 | | /| / (_)_  /
 | |/ |/ / / / /_	ANTI-SPAM WARNING:
 |__/|__/_/ /___/	the e-mail address is fake.
 
But if it's all the same to you, give me back my blue:
other colors fade anyway. (ChromaKey)

 ma non so come perche` non ci ho mai provato.
Scusa la domanda tonta, ma non conviene creare due thread? Di solito lo
faccio in java, non so se ci sia un equivalente in c... :-|
-- 
Non c'č piů forza nella normalitŕ, c'č solo monotonia.

faccio in java, non so se ci sia un equivalente in c... :-|
Nella maggior parte dei casi non conviene.
Ovviamente i dettagli dipendono dall'implementazione e dalle necessita`.
-- 
ciao, |
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it


in questo codice non ho ancora inserito la gestione della comunicazione dei
due processi.
Mi chiedo una cosa : Se è giusto quello che ho scritto , è possibile gestire
+ processi , oppure mi devo accontentare di questi due (padre/figli)
ti ringrazio in anticipo Drake

di questi due (padre/figli)
Ogni processo e` libero di fork()are tutti i figli che vuole, sempre che
stia nei limiti imposti da root. (-:
-- 
  _      ___ ____
 | | /| / (_)_  /
 | |/ |/ / / / /_	ANTI-SPAM WARNING:
 |__/|__/_/ /___/	the e-mail address is fake.
 
E' un comportamento normale come e' normale che qualunque uomo vorrebbe
trombare dalla mattina alla sera, ingozzarsi come un porco, lavorare 0 e
mettersi le dita nel naso. (Giambo, parlando del monopolio M$)

cosa intendi x exec()  un funzione che contiene un generico codice , nel mio
caso
...... grafica( .....)  {
                              // codice
                               ......
                               ......
                            };
giusto?
Grazie ancora

faccio in java, non so se ci sia un equivalente in c... :-|
Si può fare tranquillamente anche in C.
man pthread_create ecc...
Su Linux la differenza é minima, a livello di risorse impegnate. Io
personalmente considero un'implementazione a thread più pulita ed efficiente.
--
  	Giuseppe "Cowo" Corbelli  -->>  Riding on Linux-2.2.14
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! Heavy Metal Or No Metal At All! Whimps And Posers Leave The Hall !>-
 	 			Manowar - Metal Warriors

 caso
man 3 exec
-- 
  /Kinkie
Se sulla scatola c'e` scritto "Per windows 95 e superiori", dovrebbe
funzionare sotto Linux, vero?

Ma allora se devo eseguire due processi distinti , che fanno operazioni
praticamente diverse la
fork fa al caso mio. Ma se hai detto che generalmente è il figlio che manda
in esecuzione una
exec() allora nel mio caso ho bisogno che il padre generi due figli , uno
chiamato grafica() e l'altro musica().  Quesca cosa è possibile?
grazie in anticipo , Drake

cosa intendi x exec() un funzione che contiene un generico codice
Per exec() intendo che il processo viene caricato dal disco: e` un
programma a parte. Nulla ti impedisce di fork()are ed eseguire due
procedure diverse dello stesso processo (che pero` devono comunque
comunicare attraverso un pipe).
-- 
  _      ___ ____
 | | /| / (_)_  /
 | |/ |/ / / / /_	ANTI-SPAM WARNING:
 |__/|__/_/ /___/	the e-mail address is fake.
 
Find all you need in your mind, if you take the time. (Dream Theater)