Linux中如何共享内存
Linux中如何共享内存
Linux中共享内存的方式有很多种,常见的有共享库、内核模块、内核线程和进程间共享内存。下面我们就介绍一下进程间共享内存。
进程间共享内存是指两个或者多个进程之间共享同一块内存,这样就可以在多个进程之间共享数据,提高了系统的性能。进程间共享内存的方式有两种,一种是使用共享库实现,另一种是使用内核提供的共享内存功能。
使用共享库实现进程间共享内存需要使用者自己编写共享库的代码,这样就可以实现多个进程之间共享内存。共享库的代码如下所示:
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
int fd,i;
char *p;
fd=open("/tmp/test",O_RDWR|O_CREAT,0644);
if(fd<0)
{
perror("open");
exit(1);
}
p=(char *)mmap(NULL,10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
if(p==MAP_FAILED)
{
perror("mmap");
exit(1);
}
memset(p,'\0',10);
strcpy(p,"hello");
for(i=0;i<10;i++)
{
printf("%c",p[i]);
}
printf("\n");
munmap(p,10);
close(fd);
return 0;
}
使用内核提供的共享内存功能实现进程间共享内存也需要使用者自己编写代码,但是代码相对来说比较简单,如下所示:
#include
#include
#include
#include
#include
#include
#include
int main()
{
int shmid;
key_t key;
char *shm, *s;
key = 5678;
shmid = shmget(key, 27, IPC_CREAT | 0666);
if (shmid < 0)
{
perror("shmget");
exit(1);
}
shm = shmat(shmid, NULL, 0);
if (shm == (char *) -1)
{
perror("shmat");
exit(1);
}
memset(shm, 0, 27);
s = shm;
for (s = shm; *s != 0; s++)
putchar(*s);
putchar('\n');
*shm = '*';
return 0;
}
上面介绍的进程间共享内存的方式只是其中的一种,还有很多其他的方式,比如使用内核模块、内核线程等。不管使用哪种方式,实现进程间共享内存的目的都是一样的,那就是提高系统的性能。
相关文章