共享内存
#if 0
共享内存:
1.系统调用:mmap(),munmap();
2.system v:共享内存
3.系统调用:将内存中的直接映射到文件(写入文件),将文件中的映射到内存(读取文件);
1)打开文件open();
2)内存映射:mmap();将文件描述符映射为内存地址
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
@addr:映射到的地址,NULL表示由系统自动分配
@length:映射的内存大小(数据大小)
@prot:权限
PROT_EXEC Pages may be executed.
PROT_READ Pages may be read.
PROT_WRITE Pages may be written.
PROT_NONE Pages may not be accessed.
@flags:标志位,MAP_SHARED,MAP_PRIVATE等
@fd:文件描述符
@offset:偏移量
返回映射后的内存首地址addr,
3)在写入前要扩充文件大小:truncate();
4)操作数据:写入memcpy(addr,src,n),读出memcpy(dest,addr,n),strcpy();
5)解映射:int munmap(void *addr, size_t length);
6)关闭文件
#endif
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
//使用内存映射写入数据到文件
#define MAPSIZE 4096
int main()
{
int fd = open("hello",O_RDWR | O_CREAT,0600);
#if 0
void *addr = mmap(NULL,MAPSIZE,PROT_WRITE,MAP_SHARED,fd,0);