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*);