#include #include #include #include #include #include #include #include #include struct memcon { int length; char stringa[1000]; }; struct memcon *pippo; void sig_usr(int signo) { if(signo == SIGUSR1) printf("\n Lunghezza = %d, stringa = %s \n",pippo->length, pippo->stringa ); exit(0); } void sig_usr2(int signo) { if(signo == SIGUSR1) printf("\n SIGUSR1 \n"); else if(signo == SIGUSR2) printf("\n SIGUSR2 \n"); else printf("\n segnale = %d\n", signo); } int main(int argc, char *argv[]) { int shm_id, pid, pos=0; signal(SIGUSR1, sig_usr); signal(SIGUSR2, sig_usr2); shm_id = shmget(IPC_PRIVATE, sizeof(struct memcon), 0666); pippo = shmat(shm_id, 0, 0); pippo->length = 0; sprintf(pippo->stringa + pippo->length, "%s", argv[1]); pippo->length += strlen(argv[1]); printf("\n gli ultimi 4 char scritti in memoria condivisa: %s\n", pippo->stringa + pippo->length-4); // sprintf(pippo->stringa + pippo->length, "pong"); // pippo->length +=4; while(1) { pid = fork(); if(pid == 0) { if(strncmp(pippo->stringa+pippo->length-4, "ping", 4) == 0) sprintf(pippo->stringa + pippo->length, "pong"); else sprintf(pippo->stringa + pippo->length, "ping"); pippo->length +=4; if(pippo->length > 20) kill(getppid(), SIGUSR1); exit(0); } waitpid(pid,NULL,0); } }