Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ctype.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- #include <string.h>
- #include <fcntl.h>
- #include <sys/mman.h>
- #include <sys/types.h>
- #include <semaphore.h>
- #include <signal.h>
- #define PERMISSION (0600)
- #define SHM_NAME "memory_Shared"
- #define SEM_SERVER "/serverSem12"
- #define SEM_CLIENT "/clientSem12"
- #define SEM_SERVER_USAGE "/server_usageSem12"
- #define INPUT_BUFFER_SIZE (150)
- #define LOGIN_CODE (100)
- #define LOGIN_VALID (101)
- #define LOGIN_INVALID (102)
- #define BALANCE_CODE (103)
- #define TAKEOUT_CODE (104)
- #define TAKEOUT_FAILED (105)
- #define TRANSFER_CODE (106)
- #define TRANSFER_FAILED (107)
- #define PAYIN_CODE (108)
- #define LOGOUT_CODE (109)
- /* @brief server semaphore ==*/
- sem_t *sem_server;
- /* @brief client semaphore ==*/
- sem_t *sem_client;
- /* @brief server usage semaphore ==*/
- sem_t *sem_server_usage;
- /* @brief Database input==*/
- FILE *database_fd;
- /* @brief flag for the while loop ==*/
- int want_to_quit;
- /* @brief if a write to stdout is needed ==*/
- int write_out;
- /* @brief program termination flag ==*/
- int prog_term;
- /* @brief name of the input flag==*/
- char *input_filename;
- /* @brief name of the output file ==*/
- char *output_filename;
- /* @brief pointer to a db entry ==*/
- struct db_entry *database;
- /* @brief poointer to first db entry==*/
- struct db_entry *first_entry;//?????????
- /**
- *@brief prints the usage
- */
- void usage(void);
- /*
- *@brief frees the resourcesvoid free_resources(void){
- sem_close(sem_server);
- sem_close(sem_client);
- sem_close(sem_server_usage);
- sem_unlink(SEM_SERVER);
- sem_unlink(SEM_CLIENT);
- sem_unlink(SEM_SERVER_USAGE);
- //free(input_filename);
- //fclose(database_fd);
- //free(database);
- //free(first_entry);
- }
- */
- void free_resources();
- void bail_out(char *text);
- void bail_out(char *text){
- printf(text);
- free_resources();
- exit(EXIT_FAILURE);
- }
- struct myshm{
- char* username;
- char* password;
- char* message;
- int code;
- };
- int main(int argc, char **argv){
- int c =0;
- int read_arg = 0;
- int login_arg=0;
- char *username;
- char *password;
- if(argc!=4){
- usage();
- }
- while((c = getopt(argc, argv, "rl") != -1)){
- switch (c){
- case 'r':
- if(read_arg>0){
- usage();
- }
- read_arg+=1;
- break;
- case 'l':
- if(login_arg>0){
- printf("%d \n", argc);
- usage();
- }
- login_arg+=1;
- break;
- case '?':
- usage();
- break;
- default:
- // usage();
- break;
- }
- }
- username = argv[2];
- password = argv[3];
- struct myshm *shared;
- shared = malloc(sizeof(struct myshm));
- int shmfd = shm_open(SHM_NAME, O_RDWR | O_CREAT, PERMISSION);
- if(shmfd < 0){
- bail_out("Unable to open shared memory.");
- }
- shared = mmap(NULL, sizeof *shared, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);
- if(shared == MAP_FAILED){
- bail_out("Unable to open shared memory.");
- }
- if(close(shmfd) < 0){
- bail_out("Unable to close file descriptor.");
- }
- sem_server = sem_open(SEM_SERVER, 0);
- sem_client = sem_open(SEM_CLIENT, 0);
- sem_server_usage = sem_open(SEM_SERVER_USAGE, 0);
- if(sem_server == SEM_FAILED){
- printf("%d\n", errno);
- bail_out("Unable to open server semaphore.");
- }
- if(sem_client == SEM_FAILED){
- bail_out("Unable to open client semaphore.");
- }
- if(sem_server_usage == SEM_FAILED){
- bail_out("Unable to open client semaphore.");
- }
- sem_wait(sem_server_usage); // wait for my turn
- sem_wait(sem_client); // client server mutex
- sem_post(sem_server);
- sem_wait(sem_client);
- shared->username = username;
- shared->password = password;
- //myshm->message = message;
- }
- void usage(void){
- printf("USAGE: auth-client { -r | -l } username password\n");
- exit(EXIT_FAILURE);
- }
- void free_resources(void){
- sem_close(sem_server);
- sem_close(sem_client);
- sem_close(sem_server_usage);
- sem_unlink(SEM_SERVER);
- sem_unlink(SEM_CLIENT);
- sem_unlink(SEM_SERVER_USAGE);
- //free(input_filename);
- //fclose(database_fd);
- //free(database);
- //free(first_entry);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement