
Question:
#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); } }
Solution:1
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;
.
Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
EmoticonEmoticon