//fichier lecteur.cpp , Patrick TRAU - IPST ULP #include <iostream.h> #include <sys/ipc.h> #include <sys/shm.h> #include <signal.h> void handler(int num_sig) { if(num_sig==SIGUSR1) { cout<<"j'ai recu le signal\n"; } //je ne traite pas les autres signaux } main (int argc, char *argv[]) { int cle,id; char * ad; if(argc!=2) { cout<<"Usage "<<argv[0]<<" <cle (entier unique au pif)>\n"; exit(1); } cle=atoi(argv[1]); id=shmget(cle,1024,IPC_CREAT|0600); //seul r et w servent, pas x (non implante dans linux) if(id==-1) {cout<<"pb shmget !\n";exit(2); } ad=(char*)shmat(id,NULL,SHM_RDONLY); //rend l'adresse de ce qui est dans le shm, pour moi des char if(ad==(char*)-1) {cout<<"pb shmat !\n";exit(3); } signal(SIGUSR1,handler); //association du signal a ma fonction cout<<"Je suis pret a recevoir des SIGUSR1 ("<<SIGUSR1<<"), mon pid est= "<< getpid() <<"\n"; while(1) { pause(); //attente d'un signal cout<<"message recu : "<<ad<<"\n"; //on aurait aussi pu afficher dans handler, avec ad en global } }
Patrick
TRAU, ULP - IPST
nov 05