Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<fcntl.h>
  6.  
  7. #define FIFO_1 "./fifo1to2"
  8. #define FIFO_2 "./fifo2to1"
  9. #define MAX_RBUF 80
  10.  
  11.  
  12. int FIFO_f1, FIFO_f2;
  13.  
  14. int main(int argc, char *argv[])
  15. {
  16.     int child, nbyte;
  17.     char rbuf[MAX_RBUF]= " ";
  18.  
  19.     if(argc != 2) //check argc
  20.     {
  21.         fprintf(stderr,"Please Use : %s <[1,2]>\n", *argv);
  22.         exit(EXIT_FAILURE);
  23.     }
  24.    
  25.     if(access(FIFO_1,F_OK)== -1)
  26.     {
  27.         FIFO_FD1 = mkfifo(FIFO_1, 0777); //สร้างFIFO เซตPermission rwx
  28.         if(FIFO_FD1)
  29.         {
  30.             fprintf(stderr,"Create fifo error %s\n",FIFO_1);
  31.             exit(EXIT_FAILURE);
  32.         }
  33.     }
  34.  
  35.     if(access(FIFO_2,F_OK)== -1)
  36.     {
  37.         FIFO_FD2 = mkfifo(FIFO_2, 0777); //สร้างFIFO เซตPermission rwx
  38.         if(FIFO_FD2)
  39.         {
  40.             fprintf(stderr,"Create fifo error %s\n",FIFO_2);
  41.             exit(EXIT_FAILURE);
  42.         }
  43.     }
  44.  
  45.     //-----------------------------------------------------------//
  46.  
  47. FIFO_FD1 = open(FIFO_1, O_WRONLY);
  48. FIFO_FD2 = open(FIFO_2, O_RDONLY);
  49.  
  50. argv++;
  51.  
  52. if(strcmp(*argv, "1")==0) //Process ที่1
  53. {
  54.     child = fork();
  55.     switch(child)
  56.     {
  57.         case -1 : perror("Forking failed"); exit(EXIT_FAILURE);
  58.         case 0 : while(strncmp(rbuf,"end chat",8)) //ให้child อ่านค่าจากท่อ2 และแสดงผลออกterminal
  59.         {
  60.             read(FIFO_f1,buffer,sizeof(rbuf));
  61.             printf("%s\n",buffer);
  62.         }
  63.         break;
  64.         default : while(strncmp(buffer,"end chat",8)) //Parent รับค่าจากkeyboardส่งเข้าท่อที่1
  65.         {
  66.             memset(rbuf,'\0',sizeof(rbuf));
  67.             fgets(rbuf,MAX_RBUF,stdin);
  68.             write(FIFO_1,rbuf,strlen(buffer)+1);
  69.         }
  70.     }
  71.  
  72. }
  73.  
  74. if(strcmp(*argv,"2")==0) //Process ที่2
  75. {
  76.     child = fork();
  77.     switch(child)
  78.     {
  79.         case -1 : perror("Forking failed"); exit(EXIT_FAILURE);
  80.         case 0 : while(strncmp(buffer,"end chat",8)) //ให้child อ่านค่าจากท่อ1 และแสดงผลออกterminal
  81.         {
  82.             read(FIFO_f2,buffer,sizeof(buffer));
  83.             printf("%s\n",buffer);
  84.         }
  85.         default : while(strncmp(buffer,"end chat",8)) //ให้Parentรับค่าจากkeyboard แล้วส่งเข้าท่อที่2
  86.         {
  87.             memset(buffer,'\0',sizeof(buffer));
  88.             fgets(buffer,MAX_RBUF,stdin);
  89.             write(FIFO_2,buffer,strlen(buffer)+1);
  90.         }
  91.     }
  92.  
  93. }
  94.  
  95.  
  96. if (FIFO_f1 !=-1) close(FIFO_f1);
  97. if (FIFO_f2 !=-1) close(FIFO_f2);
  98.  
  99. exit(EXIT_SUCCESS);
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement