2012-04-01 38 views
5

私が構造を持っている:Cの共有メモリ(shmget/shmat)の変更方法は?

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セマフォを使用していますが、私はそのコードを含めていない。私はちょうど私が正しく共有メモリを変更する/アクセスしていますが確認したかった。)

答えて

2

これは間違いありません.PRIVATE共有メモリセグメントを作成していることに注意してください。つまり、shmidを何らかの方法で他のプロセスに送信する必要があります。

+1

他のプロセスが 'fork()'されている場合、 'fork()'の前に共有メモリが作成されている限り、IPC_PRIVATEに問題はありません。ただし、より一般的なケースでは注意が必要です。 –

4

はい、それはへの道でありますその共有メモリを作成し、アクセスし、または変更することができる。 しかし、あなたはsychronizatonの問題を抱えている可能性があります。そのためのPosixセマフォ。最初にsem_overview(7)のマニュアルページを参照してください。

+0

ありがとうございます。私は同期でうまくいく。私はちょうど "data-> time = time(null);またはdata-> x = 5"ということを心配していました。 – bfresh

関連する問題