- 论坛徽章:
- 0
|
我来献上代码,确实如lz所说
- #define _GNU_SOURCE
- #include<fcntl.h>
- #include <sys/types.h> //open
- #include <sys/stat.h>
- #include<stdio.h>
- #include<error.h>
- #include<err.h>
- #include<time.h>
- #include<string.h>
- #include<sys/mman.h>
- #include<unistd.h>
- int main()
- {
- char *buf;
- pid_t pid;
- int fd = open("./test.tmp", O_RDWR|O_CREAT|O_DIRECT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH|S_IWOTH);
- if(fd < 0)
- err(-1,"open fail");
- ftruncate(fd,4096);
- if(0 == (pid = fork()))
- {
- //child
- if( 0 != posix_memalign(&buf, 4096,4096))
- err(-1,"mem alloc");
- sleep(5);
- time_t t = time(0);
- strftime(buf, 4096, "today is a sunnly day, now is %T", localtime(&t));
- int n = 0;
- if(0 > (n = write(fd, buf, 4096)))
- err(-1,"write");
- free(buf);
- }
- else if(pid > 0)
- {
- //parent
- char * maddr = (char *)mmap(NULL, 4096, PROT_READ, MAP_SHARED ,fd, 0);
- if(maddr == MAP_FAILED)
- err(-1,"mmap");
- fprintf(stderr,"before,mmap read:%s\n",maddr);
- waitpid(pid, NULL, 0);
- fprintf(stderr,"after, mmap read:%s\n",maddr);
- munmap(maddr, 4096);
- }
- else
- err(-1,"fork");
- close(fd);
- return 0;
- }
复制代码 |
|