/* * Exemplo de uso de memória "compartilhada". * Criação de um segmento em um único processo e verificação de endereços. * Buddy system? Use o gdb... */ #include #include #include #include #include #include #define SHMSZ 100 char str_global[10]; int main() { int shmid; key_t key; char str_local[10]; char *shm; char *topo; /* Chave arbitrária para o segmento compartilhado */ key = 5677; /* Criação do segmento de memória e obtenção do seu identificador. */ if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) { perror("shmget"); exit(1); } /* Segmento é associado ao espaço de endereçamento */ if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) { perror("shmat"); exit(1); } printf("str_local = %p\n", (void *) str_local); printf("shm = %p\n", (void *) shm); printf("str_global = %p\n", (void *) str_global); printf("main = %p\n", (void *) main); topo = sbrk(0); printf("Topo da área de dados = %p\n", topo); char *aux = shm; while(1) { *aux = '*'; aux++; } return 0; }