retour cours
//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
 }
}




retour cours Patrick TRAU, ULP - IPST nov 05