7 #include <sys/socket.h>
15 static pid_t child_pid;
17 #define LENGTH (1<<20)
18 #define FNAME "mmap.dat"
20 static void child_main(int pfd)
25 while ((fd = open(FNAME,O_RDWR)) == -1) sleep(1);
27 map = mmap(0, LENGTH, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FILE, fd, 0);
34 read(pfd, &ofs, sizeof(ofs));
35 read(pfd, &len, sizeof(len));
38 memcpy(buf, map+ofs, len);
40 pread(fd, buf, len, ofs);
44 if (buf[i] != (char)(ofs+len+i)) {
45 printf("child failed\n");
51 write(pfd, &ret, sizeof(ret));
56 static void parent_main(int pfd)
59 int fd = open(FNAME,O_RDWR|O_CREAT|O_TRUNC, 0600);
61 ftruncate(fd, LENGTH);
63 map = mmap(0, LENGTH, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FILE, fd, 0);
70 ofs = random() % (LENGTH-64);
73 for (i=0;i<len;i++) buf[i] = ofs+len+i;
76 memcpy(map+ofs, buf, len);
78 pwrite(fd, buf, len, ofs);
81 write(pfd, &ofs, sizeof(ofs));
82 write(pfd, &len, sizeof(len));
84 read(pfd, &ret, sizeof(ret));
94 socketpair(AF_UNIX, SOCK_STREAM, 0, pfd);
98 if ((child_pid=fork()) == 0) {