Exemple #1
0
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);
}