#include <stdio.h>
//#include <conio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/types.h>
int t_array[100];
int h_array[100];
int c,h_comp=0,race_length=0,o=0,i=0,Ti=0;
void cursor(int y)
{
int i;
printf("%c[%d;%df",0x1B,y,o);
}
void turtle_fun()
{
int Ti=0;
while(h_comp!=1&&Ti<=race_length-1)
{
cursor(10);
printf("t ");
fflush(stdout);
Ti++;
sleep(3);
}
}
void hare_fun(int rh[])
{
int k;int i=0;
char pos_h;
close(rh[0]);
while(c!=1&&i<=race_length-1)
{
cursor(5);
printf("h ");
fflush(stdout);
i++;
sleep(1);
}
h_comp=1;
}
void god_fun(pid_t id)
{
}
void report_fun(int rh[],int rg[],int rt[])
{
int k,m,pos;
int pos_h,pos_t;
close(rh[1]);
if(k=fork()==0)
hare_fun(rh);
else
{
if(fork()==0)
turtle_fun();
}
}
void main()
{
int rg[2],rh[2],rt[2],gh[2],gt[2],ht[2];
int child_id;
pid_t cpid;
printf("what is the length of the race");
scanf("%d",&race_length);
cpid=fork();
if(cpid==0)
{
pipe(rg);
pipe(rh);
pipe(rt);
report_fun(rh,rg,rt);
}
else
{
pipe(gh);
pipe(gt);
god_fun(cpid);
}
}
views:
68answers:
1
A:
int c,h_comp=0,race_length=0,o=0,i=0,Ti=0;
After the fork() data segments would be forked too and the variables would stop being shared meaning that that:
void hare_fun(int rh[])
{
/*...*/
h_comp=1;
}
would have no effect on that
void turtle_fun()
{
while(h_comp!=1 /* ... */)
{
/* ... */
}
}
running in different process.
To get a piece of memory shared by the fork()ed processes:
- put all the fields you need to share into a struct, e.g.
struct the_struct
, - add a new global variable - pointer to the struct,
- allocate memory for the struct using
mmap(0, sizeof(struct the_struct), PROT_READ|PTOT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
somewhere at themain()
before anyfork()
. - the memory created that way would be shared after
fork()
s.
Dummy00001
2010-08-08 10:44:03