gpt4 book ai didi

c - 共享内存权限段 block c Linux

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:21 24 4
gpt4 key购买 nike

我正在尝试映射到具有 2 个不同权限的共享内存。

从服务器端,我正在读取整个共享内存数据部分和读/写互斥量部分以锁定/解锁共享内存。

从客户端的角度来看,我正在读写整个共享内存,所以这部分没有问题。

请参阅下面我在 Shm.h 文件中的 C 代码:

typedef struct 
{
unsigned int Int1;
unsigned int Int2;
unsigned int Int3;
} DataType, *DataTypeHdlr;

typedef struct
{
DataType Data;
pthread_mutex_t Mutex;
} MyShmType, *MyShmTypeHdlr;

来自 ShmRights.c 的 C 代码(服务器角度):

#include <stdio.h>
#include "Shm.h"

#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>

int main(void)
{
int FileDesc;

DataTypeHdlr MyDataHdler; /* Data handler */
pthread_mutex_t* MyMutexHdlr; /* Mutex handler*/

/* Init */
MyDataHdler = NULL;
MyMutexHdlr = NULL;

/* Open the Shared memory Read for Data and Write for Mutex */
FileDesc = shm_open("/Shm1", O_RDWR, 0660);

/* Check the File Desc validity */
if (FileDesc == -1)
{
printf("Error: Shm open\n");
return -1;
}

/* Map into different memory regions */
MyMutexHdlr = mmap(NULL, sizeof(pthread_mutex_t), PROT_READ | PROT_WRITE,
MAP_SHARED, FileDesc, 0);

MyDataHdler = mmap(NULL, sizeof(DataType), PROT_READ,
MAP_SHARED, FileDesc, sizeof(pthread_mutex_t));

/* Check that the handler are valid */
if (MyMutexHdlr == MAP_FAILED)
{
printf("Error: Mutex handler not valid\n");
return -1;
}

/* Check that the handler are valid */
if (MyDataHdler == MAP_FAILED)
{
printf("Error: Data handler not valid\n");
return -1;
}

/* Simple code to take mutex and display shm values */
pthread_mutex_lock(MyMutexHdlr);
printf("Info: Int1:%d - Int2:%d -Int3:%d\n", MyDataHdler->Int1, MyDataHdler->Int2, MyDataHdler->Int3);
pthread_mutex_unlock(MyMutexHdlr);

return 0;
}

这样,我是否正确地映射了具有正确权限的共享内存部分?它也可以便携吗?

如何确定 mmap 函数返回的指针分别正确映射到共享内存部分的数据和互斥量部分?用 DDD 吗?

感谢您的帮助。

最佳答案

是的,使用了两个进程,但据我读过几篇文章,使用 pthread mutex 代替信号量也是可能的。

客户端打开共享内存并在需要时创建它。它获取互斥锁,更新数据值并释放互斥锁。

我观察到的是,当互斥锁被锁定或释放时,值会被修改。所以,我想到了内存重叠或未正确映射的部分。黑白

关于c - 共享内存权限段 block c Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51915462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com