server.c:
#include"header1.h" int main() { pid_t pid_c,pid_p; int fd_c[2],fd_p[2],counter=0,pipec_success,pipep_success,stat_val,res; char fd_cr[2],fd_cw[2],fd_pr[2],fd_pw[2],*path; struct data_format data; path = malloc(sizeof(char)*50); while(counter < 3) { pipec_success = pipe(fd_c); if(pipec_success != 0) { perror("Pipe client:"); return -1; } sprintf(fd_cr,"%d",fd_c[0]); sprintf(fd_cw,"%d",fd_c[1]); printf("Enter path\n"); gets(path); pid_c = fork(); if(pid_c == 0) { execl(path,fd_cw,"input",NULL); } if(pid_c != 0) wait(&stat_val); read(fd_c[0],&data,sizeof(data)); //printf("read data is %d %d %c",data.num1,data.num2,data.operation); pipep_success = pipe(fd_p); if(pipep_success != 0) { perror("Pipe process:"); return -1; } write(fd_p[1],&data,sizeof(data)); sprintf(fd_pr,"%d",fd_p[0]); sprintf(fd_pw,"%d",fd_p[1]); switch (data.operation) { case '+': pid_p = fork(); if(pid_p == 0) { execl("/home/ritu/emblogic/project_3/adder",fd_pr,fd_pw,NULL); } if(pid_p != 0) wait(&stat_val); break; case '-': pid_p = fork(); if(pid_p == 0) { execl("/home/ritu/emblogic/project_3/subtractor",fd_pr,fd_pw,NULL); } if(pid_p != 0) wait(&stat_val); break; case '*': pid_p = fork(); if(pid_p == 0) { execl("/home/ritu/emblogic/project_3/multiplier",fd_pr,fd_pw,NULL); } if(pid_p != 0) wait(&stat_val); break; } read(fd_p[0],&res,sizeof(res)); write(fd_c[1],&res,sizeof(res)); pid_c = fork(); if(pid_c == 0) { execl(path,fd_cr,fd_cw,"output",NULL); } if(pid_c != 0) wait(&stat_val); counter++; } return 0; }