0

私はコードを持っています

shmid = shmget(IPC_CREAT, size, IPC_CREAT|0666) ;
if ( shmid < 0 )
{
        perror("get shm ipc_id error") ;
        return -1 ;
}
shmaddr = (unsigned int*)shmat(shmid, 0, 0 ) ;

共有メモリを作成して何かをする

底に

  shmdt( shmaddr ) ;
  shmctl(shmid, IPC_RMID, NULL) ;

共有メモリを削除します。

プログラムを初めて実行すると、正常に動作します。

しかし、2回目に実行すると、printf

get shm ipc_id error: Invalid argument

なぜそれが起こるのか分かりませんか?

共有メモリを削除してデタッチしましたが、なぜまだ発生するのですか?

そして、それを防ぐ方法は?

4

1 に答える 1