#include <stdio.h>
#include <unistd.h>
//#include <iostream.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/types.h>
int t_array[100];
int h_array[100];
int race_length=0;
void cursor(int y)
{
int i;
printf("%c[%d;%df",0x1B,y,0);
}
void turtle_fun()
{
int Ti=0;
while(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;
while(i<=race_length-1)
{
// cursor(5);
//printf("h ");
// fflush(stdout);
read(rh[0],&pos_h,1);
if(pos_h==1) write(rh[1],&i,1);
i++;
sleep(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();
else
{
printf("press 1 to know current position \n");
fflush(stdout);
scanf("%d\n",&pos);
if(pos==1) write(rh[1],&pos,1);
read(rh[0],&pos_h,1);
printf("H%d|T\n",pos_h);
printf("j");
//while(h_comp!=1||c!=1);*/
}
}
}
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);
}
}
答案 0 :(得分:0)
请勿在{{1}}格式字符串中加入\n
,这可能会导致您的程序等待两次进入。
所以在scanf()
更改
report_fun()
到
scanf("%d\n",&pos);
在scanf("%d",&pos);
中,您在子进程中调用main()
()而不是父进程。您可能想要撤消report_fun
测试。
请使用if (cpuid == 0)
代替int main(void)
,并使用void main()
结束您的主要功能。