PDA

View Full Version : [C UNIX] albero binario di processi


ilgrigio
08-06-2007, 17:39
che ne pensate di questo codice? vi sembra corretto?
non ho potuto trovare altri esempi sulla costruzione di un albero binario di processi.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define N 7
pid_t p1,p2;
int status,status2;
void build_tree(int);
void build(int i);
int
main(int argc,char* argv[])
{
printf("processo di partenza:%d\n",getpid());
build_tree(1);
return 0;
}


void build_tree(int i)
{
if (i*2<=N){
if(fork()==0){
printf("pid:%d ppid:%d\n",getpid(),getppid());
build_tree(2*i);
exit(2*i);
}
else{
p1 = wait(&status);
printf("--terminato %d status:%d\n",p1,WEXITSTATUS(status));
}
}
if(i*2+1<=N){
if(fork()==0){
printf("pid:%d ppid:%d\n",getpid(),getppid());
build_tree(2*i+1);
exit(2*i+1);
}
else{
p2 = wait(&status2);
printf("--terminato %d status:%d\n",p2,WEXITSTATUS(status2));
}
}

exit(i);
}

OUTPUT:

./process_tree
processo di partenza:13431
pid:13432 ppid:13431
pid:13433 ppid:13432
--terminato 13433 status:4
pid:13434 ppid:13432
--terminato 13434 status:5
--terminato 13432 status:2
pid:13435 ppid:13431
pid:13436 ppid:13435
--terminato 13436 status:6
pid:13437 ppid:13435
--terminato 13437 status:7
--terminato 13435 status:3