tags:

views:

32

answers:

1
#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);
    }

}   
A: 

Don't include \n in your scanf() format string, this might cause your program to wait for two enters.

So in report_fun() change

scanf("%d\n",&pos);

to

scanf("%d",&pos);

Update

In main() you call report_fun() in the child process instead of the parent. You might want to reverse the if (cpuid == 0) test.

And please, use int main(void) instead of void main() and end your main function with return 0;.

schot
i tried with that also but its still not working..
I think your problem is the `fork()` in `main()`, see update.
schot