1.创建文件。open,ftruncate
2.将文件映射到内存。内存首地址存放一个sem_t实现进程的互斥。mmap,sem_init
3.创建子进程。父子进程互斥地访问共享内存的内容。fork,sem_wait,sem_post
4.取消映射。munmap
由于需要同步或者互斥,因此需要sem_t,我们把他放在内存区的开头,那么真正可用的内存就是开头做一定偏移。维护一个指针,使指针
指向实际数据区。就定义一个结构体:
struct file_content
{
sem_t st;
void *pv;
} file_content;
初始化时:
pfc->pv = (void *) ((char *) pfc + sizeof (struct file_content)); // pv指向结构体下一个字节的地址
这样,st就是sem_t信号量。pv就是数据指针,比较方便!
另外,sem_t初始化时第二个参数设为1,表示用于进程间而不限于进程间的访问。
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#inc