Guest User

Untitled

a guest
Dec 12th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <errno.h>
  6. #include <sys/types.h>
  7.  
  8. struct client{
  9. int fd[2];
  10. pid_t pid;
  11. };
  12.  
  13. int main(){
  14. fd_set read_set;
  15. struct client clients[2];
  16. struct client servers[2];
  17. struct timeval tv;
  18. tv.tv_sec = 2;
  19. tv.tv_usec = 0;
  20. int i = 0;
  21. int j = 0;
  22. int k = 0;
  23. int r = 0;
  24. int serverbytes;
  25. int clientbytes;
  26. char serverbuffer[80];
  27. char clientbuffer[80];
  28. char message[80];
  29.  
  30. for(r;r<2;r++)
  31. {
  32. if(pipe(clients[r].fd) < 0)
  33. printf("pipe %i error n", r);
  34. else
  35. printf("client pipe %i created n", r);
  36. }
  37. r = 0;
  38. for(r;r<2;r++)
  39. {
  40. if(pipe(servers[r].fd) < 0)
  41. printf("pipe %i error n", r);
  42. else
  43. printf("server pipe %i created n", r);
  44. }
  45.  
  46. clients[0].pid = fork();
  47.  
  48. if(clients[0].pid != 0)
  49. {
  50. clients[1].pid = fork();
  51. if(clients[1].pid != 0){
  52. printf("server works. pid=%i n", getpid());
  53. while(1){
  54. int maxfd = clients[1].fd[0];
  55. FD_ZERO(&read_set);
  56. FD_SET(clients[0].fd[0], &read_set);
  57. FD_SET(clients[1].fd[0], &read_set);
  58. int serverSelect = select(maxfd+1, &read_set, NULL, NULL, &tv);
  59. if(serverSelect != -1){
  60. for(k;k<2;k++)
  61. {
  62. if(FD_ISSET(clients[k].fd[0], &read_set)){
  63. serverbytes = read(clients[k].fd[0], serverbuffer, sizeof(serverbuffer));
  64. printf("server receive: %s from client ID=%d n", serverbuffer, k);
  65. for(i;i<2;i++){
  66. if(i!=k){
  67. close(servers[k].fd[0]);
  68. write(servers[k].fd[1], serverbuffer, sizeof(serverbuffer));
  69. }
  70. }
  71. }
  72. }
  73. }
  74. else if(serverSelect == 0)
  75. printf("select timeout n");
  76. else
  77. perror("err");
  78. sleep(5);
  79. }
  80. }
  81. else
  82. {
  83. sprintf(message,"child %d", 1);
  84. printf("client %i works. pid=%i n", 1, getpid());
  85. //close(servers[1].fd[1]);
  86. //open(servers[1].fd[0]);
  87. //if(read(servers[1].fd[0], clientbuffer, sizeof(clientbuffer)) == -1){
  88. //printf("client %i read error n",1);
  89. //}
  90. //else
  91. //printf("client %i receive %s n",1,clientbuffer);
  92. //close(clients[1].fd[0]);
  93. while(1){
  94. write(clients[1].fd[1], message, (strlen(message)+1));
  95. printf("client %i send: %s n", 1, message);
  96. sleep(3);
  97. }
  98. exit(0);
  99. }
  100. }
  101. else
  102. {
  103. sprintf(message,"child %d", 0);
  104. printf("client %i works. pid=%i n", 0, getpid());
  105. //close(servers[0].fd[1]);
  106. //open(servers[0].fd[0]);
  107. //if(read(servers[0].fd[0], clientbuffer, sizeof(clientbuffer)) == -1){
  108. //printf("client %i read error n",1);
  109. //}
  110. //else
  111. //printf("client %i receive %s n",1,clientbuffer);
  112. //close(clients[0].fd[0]);
  113. while(1){
  114. write(clients[0].fd[1], message, (strlen(message)+1));
  115. printf("client %i send: %s n", 0, message);
  116. sleep(3);
  117. }
  118. exit(0);
  119. }
  120. return 0;
  121.  
  122. }
Add Comment
Please, Sign In to add comment