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

如何在C中修改共享内存(shmget/shmat)?,c,struct,shared-memory,C,Struct,Shared Memory,我有一个结构: 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)

我有一个结构:

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信号量进行同步,但我没有包含该代码。我只是想确保正确访问/修改共享内存。)

是的,这是一种创建、然后访问或修改共享内存的方法。
但是,您可能有同步问题,您可以使用Posix信号量来解决。请参阅第一个手册页。

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

谢谢。我对同步很满意。我只是担心执行“data->time=time(null);或者data->x=5”会把事情搞砸。如果另一个进程是
fork()
ed,那么只要在
fork()
之前创建共享内存,IPC\u PRIVATE就没有问题。不过,警告在更一般的情况下是有效的。