Advertisement
Guest User

client

a guest
Jan 1st, 2018
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. #include <ctype.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <errno.h>
  6. #include <string.h>
  7. #include <fcntl.h>
  8. #include <sys/mman.h>
  9. #include <sys/types.h>
  10. #include <semaphore.h>
  11. #include <signal.h>
  12.  
  13. #define PERMISSION (0600)
  14. #define SHM_NAME "memory_Shared"
  15. #define SEM_SERVER "/serverSem12"
  16. #define SEM_CLIENT "/clientSem12"
  17. #define SEM_SERVER_USAGE "/server_usageSem12"
  18. #define INPUT_BUFFER_SIZE (150)
  19.  
  20. #define LOGIN_CODE (100)
  21. #define LOGIN_VALID (101)
  22. #define LOGIN_INVALID (102)
  23. #define BALANCE_CODE (103)
  24. #define TAKEOUT_CODE (104)
  25. #define TAKEOUT_FAILED (105)
  26. #define TRANSFER_CODE (106)
  27. #define TRANSFER_FAILED (107)
  28. #define PAYIN_CODE (108)
  29. #define LOGOUT_CODE (109)
  30.  
  31. /* @brief server semaphore ==*/
  32. sem_t *sem_server;
  33. /* @brief client semaphore ==*/
  34. sem_t *sem_client;
  35. /* @brief server usage semaphore ==*/
  36. sem_t *sem_server_usage;
  37. /* @brief Database input==*/
  38. FILE *database_fd;
  39. /* @brief flag for the while loop ==*/
  40. int want_to_quit;
  41. /* @brief if a write to stdout is needed ==*/
  42. int write_out;
  43. /* @brief program termination flag ==*/
  44. int prog_term;
  45. /* @brief name of the input flag==*/
  46. char *input_filename;
  47. /* @brief name of the output file ==*/
  48. char *output_filename;
  49. /* @brief pointer to a db entry ==*/
  50. struct db_entry *database;
  51. /* @brief poointer to first db entry==*/
  52. struct db_entry *first_entry;//?????????
  53. /**
  54. *@brief prints the usage
  55. */
  56. void usage(void);
  57. /*
  58. *@brief frees the resourcesvoid free_resources(void){
  59.  
  60. sem_close(sem_server);
  61. sem_close(sem_client);
  62. sem_close(sem_server_usage);
  63.  
  64. sem_unlink(SEM_SERVER);
  65. sem_unlink(SEM_CLIENT);
  66. sem_unlink(SEM_SERVER_USAGE);
  67.  
  68. //free(input_filename);
  69. //fclose(database_fd);
  70. //free(database);
  71. //free(first_entry);
  72. }
  73.  
  74. */
  75. void free_resources();
  76. void bail_out(char *text);
  77. void bail_out(char *text){
  78. printf(text);
  79. free_resources();
  80. exit(EXIT_FAILURE);
  81. }
  82.  
  83. struct myshm{
  84. char* username;
  85. char* password;
  86. char* message;
  87. int code;
  88. };
  89.  
  90. int main(int argc, char **argv){
  91. int c =0;
  92.  
  93. int read_arg = 0;
  94. int login_arg=0;
  95. char *username;
  96. char *password;
  97. if(argc!=4){
  98. usage();
  99. }
  100.  
  101. while((c = getopt(argc, argv, "rl") != -1)){
  102. switch (c){
  103. case 'r':
  104. if(read_arg>0){
  105.  
  106. usage();
  107.  
  108. }
  109. read_arg+=1;
  110. break;
  111.  
  112. case 'l':
  113. if(login_arg>0){
  114. printf("%d \n", argc);
  115.  
  116. usage();
  117.  
  118. }
  119. login_arg+=1;
  120. break;
  121. case '?':
  122. usage();
  123. break;
  124.  
  125. default:
  126.  
  127. // usage();
  128. break;
  129. }
  130. }
  131. username = argv[2];
  132. password = argv[3];
  133.  
  134. struct myshm *shared;
  135.  
  136. shared = malloc(sizeof(struct myshm));
  137.  
  138. int shmfd = shm_open(SHM_NAME, O_RDWR | O_CREAT, PERMISSION);
  139.  
  140. if(shmfd < 0){
  141. bail_out("Unable to open shared memory.");
  142. }
  143.  
  144. shared = mmap(NULL, sizeof *shared, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);
  145.  
  146. if(shared == MAP_FAILED){
  147. bail_out("Unable to open shared memory.");
  148. }
  149.  
  150. if(close(shmfd) < 0){
  151. bail_out("Unable to close file descriptor.");
  152. }
  153.  
  154. sem_server = sem_open(SEM_SERVER, 0);
  155. sem_client = sem_open(SEM_CLIENT, 0);
  156. sem_server_usage = sem_open(SEM_SERVER_USAGE, 0);
  157.  
  158. if(sem_server == SEM_FAILED){
  159. printf("%d\n", errno);
  160.  
  161. bail_out("Unable to open server semaphore.");
  162. }
  163.  
  164. if(sem_client == SEM_FAILED){
  165. bail_out("Unable to open client semaphore.");
  166. }
  167. if(sem_server_usage == SEM_FAILED){
  168. bail_out("Unable to open client semaphore.");
  169. }
  170. sem_wait(sem_server_usage); // wait for my turn
  171.  
  172. sem_wait(sem_client); // client server mutex
  173.  
  174.  
  175. sem_post(sem_server);
  176. sem_wait(sem_client);
  177.  
  178. shared->username = username;
  179. shared->password = password;
  180. //myshm->message = message;
  181.  
  182.  
  183. }
  184. void usage(void){
  185. printf("USAGE: auth-client { -r | -l } username password\n");
  186. exit(EXIT_FAILURE);
  187. }
  188.  
  189. void free_resources(void){
  190.  
  191. sem_close(sem_server);
  192. sem_close(sem_client);
  193. sem_close(sem_server_usage);
  194.  
  195. sem_unlink(SEM_SERVER);
  196. sem_unlink(SEM_CLIENT);
  197. sem_unlink(SEM_SERVER_USAGE);
  198.  
  199. //free(input_filename);
  200. //fclose(database_fd);
  201. //free(database);
  202. //free(first_entry);
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement