我有一个结构:
struct sdata {
int x;
int y;
time_t time;
};
我为结构创建共享内存,如下所示:
size_t shmsize = sizeof(struct sdata);
shmid = shmget(IPC_PRIVATE, shmsize, IPC_CREAT | 0666);
然后我像这样访问共享内存:
struct sdata *data = shmat(shared.shmid, (void *) 0, 0);
data->time = time(NULL); // function returns the current time
我的问题非常简单。这是访问/修改共享内存的正确方法吗?这是最好的方法吗?
(我使用System V信号量进行同步,但我没有包含该代码。我只是想确保正确访问/修改共享内存。)
答案 0 :(得分:4)
是的,这是一种创建,然后访问或修改共享内存的方法。 但是,您可能会遇到sychronizaton问题,并且可以使用例如Posix信号量。请参见第一个sem_overview(7)手册页。
答案 1 :(得分:2)
这是正确的,唯一值得注意的是您正在创建一个PRIVATE共享内存段,这意味着您必须以某种方式将shmid传输到您想要使用它的任何其他进程。