#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 = 2.0 * 1024.0 * 1024.0 * 1024.0;
char *p = malloc(SIZE);
if (!p) { perror("malloc"); return 1; }
for(size_t i = 0; i < SIZE; ++i) {
p[i] = 'x';
}
for(int c = 0; c < 1000; ++c) {
size_t i = rand() % SIZE;
printf("%c\n", p[i]);
usleep(100 * 1000);
}
}