Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<unistd.h>
- #include<stdlib.h>
- #include<string.h>
- #include<fcntl.h>
- #define FIFO_1 "./fifo1to2"
- #define FIFO_2 "./fifo2to1"
- #define MAX_RBUF 80
- int FIFO_f1, FIFO_f2;
- int main(int argc, char *argv[])
- {
- int child, nbyte;
- char rbuf[MAX_RBUF]= " ";
- if(argc != 2) //check argc
- {
- fprintf(stderr,"Please Use : %s <[1,2]>\n", *argv);
- exit(EXIT_FAILURE);
- }
- if(access(FIFO_1,F_OK)== -1)
- {
- FIFO_FD1 = mkfifo(FIFO_1, 0777); //สร้างFIFO เซตPermission rwx
- if(FIFO_FD1)
- {
- fprintf(stderr,"Create fifo error %s\n",FIFO_1);
- exit(EXIT_FAILURE);
- }
- }
- if(access(FIFO_2,F_OK)== -1)
- {
- FIFO_FD2 = mkfifo(FIFO_2, 0777); //สร้างFIFO เซตPermission rwx
- if(FIFO_FD2)
- {
- fprintf(stderr,"Create fifo error %s\n",FIFO_2);
- exit(EXIT_FAILURE);
- }
- }
- //-----------------------------------------------------------//
- FIFO_FD1 = open(FIFO_1, O_WRONLY);
- FIFO_FD2 = open(FIFO_2, O_RDONLY);
- argv++;
- if(strcmp(*argv, "1")==0) //Process ที่1
- {
- child = fork();
- switch(child)
- {
- case -1 : perror("Forking failed"); exit(EXIT_FAILURE);
- case 0 : while(strncmp(rbuf,"end chat",8)) //ให้child อ่านค่าจากท่อ2 และแสดงผลออกterminal
- {
- read(FIFO_f1,buffer,sizeof(rbuf));
- printf("%s\n",buffer);
- }
- break;
- default : while(strncmp(buffer,"end chat",8)) //Parent รับค่าจากkeyboardส่งเข้าท่อที่1
- {
- memset(rbuf,'\0',sizeof(rbuf));
- fgets(rbuf,MAX_RBUF,stdin);
- write(FIFO_1,rbuf,strlen(buffer)+1);
- }
- }
- }
- if(strcmp(*argv,"2")==0) //Process ที่2
- {
- child = fork();
- switch(child)
- {
- case -1 : perror("Forking failed"); exit(EXIT_FAILURE);
- case 0 : while(strncmp(buffer,"end chat",8)) //ให้child อ่านค่าจากท่อ1 และแสดงผลออกterminal
- {
- read(FIFO_f2,buffer,sizeof(buffer));
- printf("%s\n",buffer);
- }
- default : while(strncmp(buffer,"end chat",8)) //ให้Parentรับค่าจากkeyboard แล้วส่งเข้าท่อที่2
- {
- memset(buffer,'\0',sizeof(buffer));
- fgets(buffer,MAX_RBUF,stdin);
- write(FIFO_2,buffer,strlen(buffer)+1);
- }
- }
- }
- if (FIFO_f1 !=-1) close(FIFO_f1);
- if (FIFO_f2 !=-1) close(FIFO_f2);
- exit(EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement