写端:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main(int argc, const char *argv[])
{
key_t key = ftok("/home/linux",'!');//创建临时键值
if(-1 == key)
{
perror("ftok error!\n");
exit(1);
}
int shmid = shmget(key,54889,IPC_CREAT|0666);//申请共享内存
if(-1 == shmid)
{
perror("shmget error!\n");
exit(1);
}
void *p = shmat(shmid,NULL,!SHM_RDONLY);//将共享内存映射到本地内存
if((void *) -1 == p)
{
perror("shmat error!\n");
exit(1);
}
FILE * fp = fopen("/home/linux/11.jpg","r");
fread(p,54889,1,fp);
shmdt(p);
return 0;
}
读端:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main(int argc, const char *argv[])
{
key_t key = ftok("/home/linux",'!');
if(-1 == key)
{
perror("ftok error!\n");
exit(1);
}
int shmid = shmget(key,54889,IPC_CREAT|0666);
if(-1 == shmid)
{
perror("shmget error!\n");
exit(1);
}
void *p = shmat(shmid,NULL,!SHM_RDONLY);
if((void *) -1 == p)
{
perror("shmat error!\n");
exit(1);
}
FILE * fp = fopen("./1.jpg","w");
fwrite(p,54889,1,fp);
shmdt(p);//撤销映射
shmctl(shmid,IPC_RMID,NULL);//删除对象
return 0;
}