linux网络编程之共享内存简介和mmap函数
发布时间:2016-09-22 01:35:31 所属栏目:Linux 来源:站长网
导读:一、共享内存简介 共享内存区是最快的IPC形式,这些进程间数据传递不再涉及到内核,换句话说是进程不再通 过执行进入内核的系统调用来传递彼此的数据。 即每个
|
下面写 两个程序测试一下: mmap_write.c
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
#include<unistd.h>
#include<errno.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/mman.h>
#define ERR_EXIT(m)
do {
perror(m);
exit(EXIT_FAILURE);
} while(0)
typedef struct stu
{
char name[4];
int age;
} STU;
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "Usage: %s <file>n", argv[0]);
exit(EXIT_FAILURE);
}
int fd;
fd = open(argv[1], O_CREAT | O_RDWR | O_TRUNC, 0666);
if (fd == -1)
ERR_EXIT("open");
lseek(fd, sizeof(STU) * 5 - 1, SEEK_SET);
write(fd, "", 1);
STU *p;
p = (STU *)mmap(NULL, sizeof(STU) * 5, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
if (p == -1)
ERR_EXIT("mmap");
char ch = 'a';
int i;
for (i = 0; i < 5; i++)
{
memcpy((p + i)->name, &ch, 1);
(p + i)->age = 20 + i;
ch++;
}
printf("initialize overn");
munmap(p, sizeof(STU) * 5);
printf("exit...n");
return 0;
}
mmap_read.c
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
#include<unistd.h>
#include<errno.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/mman.h>
#define ERR_EXIT(m)
do {
perror(m);
exit(EXIT_FAILURE);
} while(0)
typedef struct stu
{
char name[4];
int age;
} STU;
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "Usage: %s <file>n", argv[0]);
exit(EXIT_FAILURE);
}
int fd;
fd = open(argv[1], O_RDWR);
if (fd == -1)
ERR_EXIT("open");
STU *p;
p = (STU *)mmap(NULL, sizeof(STU) * 5, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
if (p == -1)
ERR_EXIT("mmap");
int i;
for (i = 0; i < 5; i++)
{
printf("name = %s age = %dn", (p + i)->name, (p + i)->age);
}
munmap(p, sizeof(STU) * 5);
printf("exit...n");
return 0;
} (编辑:源码门户网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

