1
私は共有メモリセグメントを扱っていて、この問題に遭遇しました。共有メモリ初期化問題(c)
私は多くのプロセス間の構造体を共有しようとしています:[1]すでに値2673で初期化され
struct shmstruct{
int pid[50];
char user[50][10];
};
struct shmstruct *shmobj;
void *shmp;
int main()
{
//server creates shared memory
if((shmid = shmget((key_t)1234,sizeof(struct shmstruct),0666|IPC_CREAT)) == -1){
fprintf(stderr,"shmget failed\n");
exit(EXIT_FAILURE);
}
//server attaches shared memory segment to pointer (void *)
if((shmp = shmat(shmid,(void *) 0,0)) == (void *)-1){
fprintf(stderr,"shmat failed\n");
exit(EXIT_FAILURE);
}
//structure is now linked with shared memory pointer
printf("Memory attached at %X\n",shmp);
shmobj = (struct shmstruct *)shmp;
int i;
for(i = 0; i < 50; i++)
if(shmobj->pid[i]!=0)
printf("shminit:i:%d user:%s pid:%d\n", i, shmobj->user[i], shmobj->pid[i]);
}
しかし、私が作成し、共有メモリセグメントをアタッチするたびに、shmobj-> PID!
printf関数の結果は、常に次のとおりです。なぜこれが起こっているの
shminit:i:1 user: pid:2673
任意のアイデア?
ありがとうございます!
あなたの洞察力をありがとう! IPC_PRIVATEは新鮮な新しいshmセグメントを確実に得ることができるようです。私はそれについての確認を得ることができますか? –
@Littledot、私はあなたが最初にセグメントを作成し、子をフォークすると動作するメモリから考えています。それ以外の場合は、実際にメモリを共有する方法はありません。 – paxdiablo
これはまさに私がやっていることです。子どもを育て、両親と記憶を共有する。それを入れてくれて申し訳ありません。 –