Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6.  
  7. #define CLIENT_FIFO "client_fifo"
  8. #define SERVER_FIFO "server_fifo"
  9.  
  10. typedef struct request_t
  11. {
  12. int payloadSize;
  13.  
  14. // payload
  15. int id;
  16. char* homepath;
  17.  
  18. } request;
  19.  
  20. typedef struct response_t
  21. {
  22. int payloadSize;
  23.  
  24. // payload
  25. char* name;
  26.  
  27. } response;
  28.  
  29. request* createRequest(int id, char* homepath)
  30. {
  31. request* req = malloc(sizeof(request));
  32. req->id = id;
  33. req->homepath = homepath;
  34. req->payloadSize = sizeof(req->id) + strlen(req->homepath);
  35. return req;
  36. }
  37.  
  38. void sendRequest(int serverFifoHandle, request* req)
  39. {
  40. int requestSize = sizeof(req->payloadSize) + req->payloadSize;
  41. void* buffer = malloc(requestSize);
  42.  
  43. memcpy(buffer, &req->payloadSize, sizeof(req->payloadSize));
  44. memcpy(buffer + sizeof(req->payloadSize), &req->id, sizeof(req->id));
  45. memcpy(buffer + sizeof(req->payloadSize) + sizeof(req->id), req->homepath, req->payloadSize - sizeof(req->id));
  46.  
  47. write(serverFifoHandle, buffer, requestSize);
  48. free(buffer);
  49. }
  50.  
  51. response* receiveResponse(int clientFifoHandle, int responsePayloadSize)
  52. {
  53. response* res = malloc(sizeof(responsePayloadSize) + responsePayloadSize);
  54. res->payloadSize = responsePayloadSize;
  55. res->name = malloc(responsePayloadSize);
  56.  
  57. void* buffer = malloc(responsePayloadSize);
  58. read(clientFifoHandle, buffer, responsePayloadSize);
  59. memcpy(res->name, buffer, responsePayloadSize);
  60.  
  61. free(buffer);
  62. return res;
  63. }
  64.  
  65. void handleResponse(int clientFifoHandle)
  66. {
  67. int responsePayloadSize = 0;
  68. if (read(clientFifoHandle, &responsePayloadSize, sizeof(responsePayloadSize)) > 0)
  69. {
  70. response* res = receiveResponse(clientFifoHandle, responsePayloadSize);
  71. printf("%s\n", res->name);
  72. }
  73. }
  74.  
  75. int main(int argc, char * argv[])
  76. {
  77. int serverFifo = open(SERVER_FIFO, O_WRONLY);
  78. request* req = createRequest(atoi(argv[1]), getenv("HOME"));
  79. sendRequest(serverFifo, req);
  80.  
  81. int clientFifo = open(CLIENT_FIFO, O_RDONLY);
  82. handleResponse(clientFifo);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement