Esercizio 1 Prova Pratica 30-05-11
Jump to navigation
Jump to search
Scrivere due programmi in modo che i parametri passati al
primo vengano stampati dal secondo. La comunicazione deve avvenire tramite una shared memory realizzata
con la chiamata POSIX shm_open, la sincronizzazione tramite segnali. Viene attivato per primo il programma
ricevente. (anche i pid dei processi possono venir scambiati attraverso la shared memory!).
Es: scrivere in un terminale:
$./receiver
l'esecuzione di “receiver rimane in attesa”. in un secondo terminale scrivere:
$./sender a bb ccc
nel primo deve comparire
./sender
a
bb
ccc
Soluzione di Dado e Pierg
sender.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char * argv[]){
int fd,i;
fd=shm_open("/shared",O_RDWR,'w');
if(fd==-1){
fprintf(stderr,"Error while opening the shared memory\n");
}
for(i=0;i<argc;i++){
write(fd,argv[i],sizeof(argv[i]));
write(fd,"\n",1);
}
return 0;
}
receiver.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MAXLENGTH 1024
int main(int argc, char * argv[]){
int fd;
ssize_t dim;
char buff[MAXLENGTH];
fd=shm_open("/shared",O_RDWR,'r');
while((dim=read(fd,&buff,MAXLENGTH))){
write(stdout,buff,MAXLENGTH);
}
return 0;
}