#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);
}
}
最佳答案
int c,h_comp = 0,race_length = 0,o = 0,i = 0,Ti = 0;
在fork()之后,数据段也将被分叉,并且变量将停止共享,这意味着:
void hare_fun(int rh[])
{
/*...*/
h_comp=1;
}
对此没有影响
void turtle_fun()
{
while(h_comp!=1 /* ... */)
{
/* ... */
}
}
在不同的进程中运行。
要获得fork()ed进程共享的一块内存:
将您需要共享的所有字段都放入一个结构中,例如
struct the_struct
,添加一个新的全局变量-指向该结构的指针,
在任何
mmap(0, sizeof(struct the_struct), PROT_READ|PTOT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
之前的main()
某处使用fork()
为该结构分配内存。创建的内存将在
fork()
之后共享。关于c - h和t仅打印1次...为什么呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3433448/