共享映射区的介绍请看此篇文章:
linux_共享存储映射区-mmap函数-munmap函数-进程通信-strace命令
本篇文章是对共享存储映射区的补充,也是一个例子代码,大家可以借鉴学习。
此博主在CSDN发布的文章目录:【我的CSDN目录,作为博主在CSDN上发布的文章类型导读】
#include
#include
#include
#include
#include
#include
#include
#include
struct student_t {
int id;
char name[20];
char sex;
};
int main(int argc, char *argv[])
{
int fd;
struct student_t student = {10, "lisi", 'm'};
char *mm = NULL;
fd = open("temp", O_RDWR | O_CREAT, 0664);//打开文件
if(fd == -1)
{
perror("open error");
exit(1);
}
ftruncate(fd, sizeof(student));//拓展文件大小
mm = mmap(NULL, sizeof(student), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);//创建映射区
if (mm == MAP_FAILED)
{
perror("mmap error");
exit(1);
}
close(fd);
//循环写数据
while (1)
{
memcpy(mm, &student, sizeof(student));
student.id++;
sleep(1);
}
munmap(mm, sizeof(student));
return 0;
}
#include
#include
#include
#include
#include
#include
#include
struct student_t {
int id;
char name[20];
char sex;
};
int main(int argc, char *argv[])
{
int fd;
struct student_t student;
struct student_t *mm = NULL;
fd = open("temp", O_RDONLY);//打开文件
if (fd == -1)
{
perror("open error");
exit(1);
}
mm = mmap(NULL, sizeof(student), PROT_READ, MAP_SHARED, fd, 0);//创建映射区
if (mm == MAP_FAILED)
{
perror("mmap error");
exit(1);
}
close(fd);
//循环读数据
while (1)
{
printf("id=%d\tname=%s\t%c\n", mm->id, mm->name, mm->sex);
sleep(2);
}
//释放映射区
munmap(mm, sizeof(student));
return 0;
}
以上就是本次的分享了,希望能对大家有所帮助。