C中的共享内存代码片段

时间:2013-10-27 15:27:21

标签: c ipc shared-memory

我遇到了以下代码段

    int seg1 = shmget( number, 1, 0660 );
    if( -1 != seg1 )
    {
        struct shmid_ds buf;
        shmctl( seg1, IPC_RMID, &buf );
        fprintf( stderr, "Removed existing shared memory segment" );
    }
    int seg = shmget( number, 2 * size, IPC_CREAT | 0660 );
    Buffer =  (char*) shmat( seg, NULL, 0 );

问题:

1)shmget(号码,1号,0660) f未指定IPC_CREAT或IPC_EXCL且仅指定0660,默认IPC_是什么?这不解释这个/

2)为什么要为大小为1字节的密钥号做一个shmget,然后做一个IPC_RMID,然后再用更大的空间做一个相同密钥的shmget?

1 个答案:

答案 0 :(得分:1)

  

1)shmget(number,1,0660)f未指定IPC_CREAT或IPC_EXCL且仅指定0660,默认IPC_是什么?这不解释这个/

默认情况下,这两个选项均不适用。该段仅在已存在时才会打开。

  

2)为什么要为大小为1字节的密钥号做一个shmget,然后做一个IPC_RMID,然后再用更大的空间做一个相同密钥的shmget?

目的只是删除现有的共享内存段,无论其大小如何。如果shmget大于现有细分的大小,则size函数将失败,因此使用一个函数可确保它不会失败。