进程间通信-mmap#include

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

int munmap(void *addr, size_t length);  mmap本质是把内存与硬盘上的文件同步。某块内存中的内容会同步到硬盘文件上,即把文件映射到内存。故通过对同一文件的读写达到进程间的通信。參数解释:addr:指定对哪儿块内存实行映射。NULL表示由系统分配。length:addr的长度prot:内存块儿的属性:读、写、运行。flag:内存块儿的内容是否同步到文件里。MAP_SHARED同步,MAP_PRIVATE不同步。fd:文件描写叙述符offset:文件映射的起始位置成功。返回映射的内存地址;失败返回void *(-1)。mmap.c#include

#include

#include

#include

#include

#include

#include

void sys_err(char *s)

{

perror(s);

exit(1);

}

int main(int argc, char **argv)

{

if(argc < 2)

{

fprintf(stdin, "usage:./a.out filename");

return 1;

}

int fd;

fd = open(argv[1], O_RDWR);

if(fd < 0) sys_err("open");

off_t len;

len = lseek(fd, 0, SEEK_END);

void *mem;

mem = mmap(NULL, len, PROT_WRITE, MAP_SHARED, fd, 0);

if(mem == MAP_FAILED) //#define MAP_FAILED ((void *) -1)

sys_err("mmap");

/*

if((void*)-1 == mem)

sys_err("mmap");

*/

close(fd);

printf("%s\n", mem);

*(char*)mem = 'Z';

*(char*)(mem + 1) = 'X';

if(-1 == munmap(mem, len))

sys_err("munmap");

return 0;

}文件file:zhangxiang$ gcc mmap.c

$ ./a.out file

$ cat file

ZXangxiang   有了以上的基础,使用mmap进行进程间的通信就简单了。    CCPP Blog 文件夹

查看原文