#include <sys/mman.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
void sigbus(int signo)
{
write(2, "SIGBUS\n", 7);
_exit(42);
}
int main()
{
signal(SIGBUS, sigbus);
const size_t SIZE = 512.0 * 1024.0 * 1024.0;
int fd = shm_open("onamae", O_CREAT | O_RDWR, 0666);
if(fd < 0) { perror("shm_open"); return 1; }
if(ftruncate(fd, SIZE) < 0) { perror("ftruncate"); return 1; }
char* p = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if(p == MAP_FAILED) { perror("mmap"); return 1; }
for(size_t i = 0; i < SIZE; ++i) {
p[i] = 'x';
}
for(int c = 0; c < 1000; ++c) {
size_t i = 4096 * (rand() * 0x10000ul + rand());
i %= SIZE;
printf("%c\n", p[i]);
usleep(100 * 1000);
}
}