Questo modulo contiene :
i files di inclusione di sistema necessari per le primitive utilizzate.
le definizioni di alcune strutture utilizzate dall' applicazione.
le definizioni dei segmenti di memoria condivisa e del semaforo generalizzato utilizzate nell' applicazione.
le dichiarazioni extern delle variabili e funzioni richiamate dai diversi componenti del progetto e definite nel modulo moduli.
Codice
/* start.h */
#include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <netdb.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/time.h> #include <sys/ipc.h> #include <sys/sem.h> #include <sys/shm.h> #include <signal.h> #include <errno.h> #include <stdio.h> #include <time.h> #include <sys/wait.h>
#define BUFLEN 60 /*dimensione del msg inviato dal st per registrarsi*/ #define BUFFERLEN 20 #define REFLEX 3 #define CALDO 2 #define FREDDO 1 #define PORTA_MNTR 20000 /*porta di mirror dei NS*/ #define PORTA_RPLS 20001 /*porta di ricezione al Bcast di elezione*/ #define PORTA_BCAST_EL 30000 /*porta Bcast del protocollo di elezione*/ #define PORTA_BCAST_NS 31000 /*porta Bcast di ricerca dei NS attivi*/ #define PORTA_DG_CL 32200 /*porta di servizio CLIENT del NS HOT*/ #define PORTA_LS_ST 32100 /*porta di servizio SERVER del NS HOT*/ #define PORTA_TERM 25000 /*porta di servizio TERMINALE del NS HOT-COLD*/ #define PORTA_TERM_RPLS 26000 /*porta di acq. risp. al bcast di TERMINALE*/
#define SHMKEY_TAB_TERM ((key_t) 7000) /*chiave per la shmem del terminale*/ #define SHMKEY_TAB_NS ((key_t) 7001) /*chiave per la shmem del NS HOT*/ #define SHMKEY_TAB_COLD ((key_t) 7002) /*chiave per la shmem del NS COLD*/ #define SHMKEY_INDEX ((key_t) 7003) /*chiave per la shmem per index*/ #define SEMKEY ((key_t) 8004) /*chiave per la struttura dei semafori*/ #define PERM 0666
static struct sembuf lock_ns[2]= { {0,0,0}, /*si aspetta che si sblocchi il semaforo*/ {0,1,SEM_UNDO} /*si blocca il semaforo*/ }; static struct sembuf unlock_ns[1]= { {0,-1,SEM_UNDO} /*si sblocca il semaforo */ };
static struct sembuf lock_cold[2]= { {1,0,0}, /*si aspetta che si sblocchi il semaforo*/ {1,1,SEM_UNDO} /*si blocca il semaforo*/ }; static struct sembuf unlock_cold[1]= { {1,-1,SEM_UNDO} /*si sblocca il semaforo */ };
typedef struct { unsigned short stato; char host[24]; char porta_cl[10]; char porta_ud[10]; char porta_res[10]; unsigned short porta_ka; } TUPLA; TUPLA (*ptr_tab_hot)[2],(*ptr_tab_cold)[2],(*ptr_tab_term)[2];
typedef struct { unsigned short stato_NS; char host_NS[24]; unsigned short porta_mntr; unsigned short porta_replies; time_t tempo; } MSG_EL;
typedef struct { unsigned short stato; unsigned short porta_ka; } MSG_PROBE;
typedef struct { unsigned short porta_dg_cl; unsigned short porta_ls_st; } MSG_NS;
int * ptr_index,len=sizeof(struct sockaddr_in);
/*dichiarazione delle variabili e funzioni definite in altri moduli*/ extern int errno;
extern void demone(void); extern int make_socket(struct sockaddr_in*,int*,ushort,char,FILE*); extern int connections(struct sockaddr_in*,int*,char*,ushort,char,FILE*); extern void clear_screen(void); extern void put_into(MSG_EL*,MSG_EL*);