#include #include #include #include #include #include void filho(); void pai(); char* shrd; int main(int argc, char **argv) { pid_t pid; int fd; /* abre arquivo para associar com area compartilhada */ /* arquivo tem que existir anteriormente com o tamanho desejado */ fd = open("temp", O_RDWR); /* aborta programa se assertiva for falsa: */ assert(fd>=0); /* mapeia arquivo aberto anteriormente */ /* PROT_READ|PROT_WRITE especifica que area pode ser lida e escrita */ /* MAP_SHARED especifica compartilhamento com outros processos */ shrd = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); assert(shrd>=0); /* nao precisa mais do descritor */ close(fd); *shrd=0; assert((pid=fork())>=0); if (pid==0) filho(); else { pai(); assert(waitpid(pid,NULL,0)==pid); assert(munmap(shrd,sizeof(int))==0); } } void filho() { int i; for (i=0;i<5;i++) { printf("filho: %d\n",*shrd); (*shrd)++; printf("filho incrementou\n"); } } void pai() { int i; for (i=0;i<5;i++) { printf("pai: %d\n",*shrd); (*shrd)++; printf("pai incrementou\n"); } }