关于linux共享内存的使用
#include<sys/shm.h>#include<sys/mman.h>#include<fcntl.h>#include<unistd.h>#include<st...
#include<sys/shm.h>
#include<sys/mman.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/ipc.h>
#define CHILMES "this is the client's message" /*子进程消息*/
#define PAREMES "this is the father's message" /*父进程消息*/
#define SHM_SIZE 1000 /*共享内存大小*/
int main(void)
{
int fd;
fd = open("./shmap.txt",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IXUSR);
int shmid;
shmid = shmget(IPC_PRIVATE,SHM_SIZE,0600);
char *shmptr;
shmptr = shmat(shmid,0,0);
mmap(shmptr,SHM_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
pid_t pid;
if((pid=fork())<0)
{
printf("pid error\n");
exit(2);
}
else if(pid == 0)//子进程
{
sleep(3); //让父进程先写内存
memcpy(shmptr+sizeof(PAREMES),CHILMES,sizeof(CHILMES));
}
else
{
memcpy(shmptr,PAREMES,sizeof(PAREMES));
}
msync(shmptr,SHM_SIZE,MS_SYNC);
}
意图在于创建一个文件映射到共享内存中,父子进程均对其进行操作,将更改后信息写在文件里,现在程序执行完文件里没有东西。。。。。ORZ
可能是mmap的错误,但不知道错在哪。。 展开
#include<sys/mman.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/ipc.h>
#define CHILMES "this is the client's message" /*子进程消息*/
#define PAREMES "this is the father's message" /*父进程消息*/
#define SHM_SIZE 1000 /*共享内存大小*/
int main(void)
{
int fd;
fd = open("./shmap.txt",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IXUSR);
int shmid;
shmid = shmget(IPC_PRIVATE,SHM_SIZE,0600);
char *shmptr;
shmptr = shmat(shmid,0,0);
mmap(shmptr,SHM_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
pid_t pid;
if((pid=fork())<0)
{
printf("pid error\n");
exit(2);
}
else if(pid == 0)//子进程
{
sleep(3); //让父进程先写内存
memcpy(shmptr+sizeof(PAREMES),CHILMES,sizeof(CHILMES));
}
else
{
memcpy(shmptr,PAREMES,sizeof(PAREMES));
}
msync(shmptr,SHM_SIZE,MS_SYNC);
}
意图在于创建一个文件映射到共享内存中,父子进程均对其进行操作,将更改后信息写在文件里,现在程序执行完文件里没有东西。。。。。ORZ
可能是mmap的错误,但不知道错在哪。。 展开
1个回答
快又稳
2024-10-23 广告
2024-10-23 广告
广州快又稳网络科技有限公司是一家集技术研发、产品创新、服务优化于一体的高新技术企业。公司自成立以来,始终秉承“网络使人类缩进距离,我们让网络快又稳”的核心理念,致力于为全球客户提供高效、安全、易用的互联网解决方案及信息技术服务。在数字时代,...
点击进入详情页
本回答由快又稳提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询