/* * Exemplo de uso de memória "compartilhada". Vamos * verificar a alocação de uma página. */ #include #include #include #include #include #include #define SHMSZ 27 /* Será arredondado para um múltiplo de PAGE_SIZE */ char str_dados[10]; int main() { int shmid; key_t key; char str_pilha[10]; char *shm; int pagesize = getpagesize(); /* 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); } /* Tentativa de associação próximo à área de dados. */ if ((shm = shmat(shmid, str_dados+0x10000, SHM_RND)) == (char *) -1) { printf("shmat at 0x%x\n", (unsigned int) str_dados+0x1000); perror("shmat"); } printf("str_pilha = 0x%x\n", (unsigned int) str_pilha); printf("shm = 0x%x\n", (unsigned int) shm); printf("str_dados = 0x%x\n", (unsigned int) str_dados); printf("main = 0x%x\n", (unsigned int) main); shm[pagesize - 1] = 0; shm[pagesize] = 0; return 0; }