void printThemes() { hexchat_printf(ph,"\nNotRun-Theme:\n"); printTheme(notRunTheme); hexchat_printf(ph,"\nMP3-Theme:\n"); printTheme(mp3Theme); hexchat_printf(ph,"\nOGG-Theme:\n"); printTheme(oggTheme); hexchat_printf(ph,"\nTitle-Theme:\n"); printTheme(titleTheme); }
int main(int argc, char* argv[], char* envp[]){ setbuf(stdout, NULL); //stdout sans buffer int msg_id; struct _msg message; key_t key; /* Gestion arguments */ if(argc!=3){ fprintf(stderr,"Ce programme doit etre appele avec 2 arguments (%d) :\n\t%s int num_archiviste >0 int nb_theme >2\n",argc,argv[0]); exit(-1); }else if(atoi(argv[1])<1){ fprintf(stderr,"Veuillez préciser un numero positif pour cet archiviste (%d).\n",atoi(argv[1])); exit(-1); }else if(atoi(argv[2])<2){ fprintf(stderr,"Veuillez préciser un nombre de theme supérieur a 2.\n"); exit(-1); } /* Gestion signal */ struct sigaction sig1; sig1.sa_handler = sig_h; sigemptyset(&sig1.sa_mask); sig1.sa_flags=0; sigaction(SIGUSR1,&sig1,NULL); /* Init Clef */ key = init_key((char)0); /* Initialisation file de messages */ if ( (msg_id = msgget(key, IPC_EXCL|0666)) == -1 ){ perror("Probleme a la recuperation de la pile."); exit(1); } int msgsz = sizeof(message)-sizeof(long); //taille d'un message while(!done){ //tant que pas fini (voir signal et handler plus bas) if(msgrcv(msg_id,&message,msgsz,0,0)!=-1){ // recevoir le prochain message (gestion des message de confirmation prevu par signal, mais comme cela ne fonctionne pas...) if(message.mtype==1){//publication fprintf(stdout,"[A-%d] Publication : %d <- %s\n\n",(int)getpid(),message.theme,message.mtext); publicate(message.theme,message.mtext); }else if(message.mtype==2){//consultation fprintf(stdout,"[A-%d] Consultation : %d \n\n",(int)getpid(),message.theme); printTheme(message.theme); }else{//reste fprintf(stdout,"[A-%d] Message Received (%ld) : %s\n\n",(int)getpid(),message.mtype,message.mtext); } }else{//si erreur a la reception arreter la boucle done = 1; } } exit(0); }