blob: 9f50e620a55499e2fa43345ec4a20493a5711bcc [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <parlib/parlib.h>
#include <parlib/timing.h>
int main(void)
{
int pFile, *first;
pid_t pid;
pFile = open ("hello.txt", O_RDWR | O_CREAT, (mode_t)0600);
/* this mmap will give you a Bus Error on linux if you try to map more
* pages than the file contains (i think)... */
first = (int*)mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, pFile, 0);
if (first == MAP_FAILED) {
fprintf(stderr, "Unable to mmap the file (%d), aborting!\n", errno);
return -1;
}
first[0] = 3;
printf("the first number after initialization is %d at %08p\n", first[0],
first);
if ((pid = fork()) < 0) {
perror("fork error");
exit(1);
}
if (pid == 0) {
/* delay here, to avoid the race a bit */
udelay(1000000);
printf("After fork in the parent, the first number is %d\n", first[0]);
first[0] = 99;
printf("Pid 0 sees value %d at mmapped address %08p\n", first[0],
first);
} else {
printf("After fork in the child, the first number is %d\n", first[0]);
first[0] = 11;
printf("Child pid %d sees value %d at mmapped address %08p\n", pid,
first[0], first);
}
}