如何在C中修改共享内存(shmget/shmat)?

bfr*_*esh 5 c struct shared-memory

我有一个结构:

struct sdata {
    int x;
    int y;
    time_t time;
};
Run Code Online (Sandbox Code Playgroud)

我为结构创建共享内存,如下所示:

size_t shmsize = sizeof(struct sdata);
shmid = shmget(IPC_PRIVATE, shmsize, IPC_CREAT | 0666);
Run Code Online (Sandbox Code Playgroud)

然后我像这样访问共享内存:

struct sdata *data = shmat(shared.shmid, (void *) 0, 0);
data->time = time(NULL); // function returns the current time
Run Code Online (Sandbox Code Playgroud)

我的问题非常简单.这是访问/修改共享内存的正确方法吗?这是最好的方法吗?

(我使用System V信号量进行同步,但我没有包含该代码.我只是想确保正确访问/修改共享内存.)

Chr*_*odd 2

这是正确的,唯一值得注意的是您正在创建一个私有共享内存段,这意味着您必须以某种方式将 shmid 传输到您想要使用它的任何其他进程。