我遇到了以下代码段
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?
答案 0 :(得分:1)
1)shmget(number,1,0660)f未指定IPC_CREAT或IPC_EXCL且仅指定0660,默认IPC_是什么?这不解释这个/
默认情况下,这两个选项均不适用。该段仅在已存在时才会打开。
2)为什么要为大小为1字节的密钥号做一个shmget,然后做一个IPC_RMID,然后再用更大的空间做一个相同密钥的shmget?
目的只是删除现有的共享内存段,无论其大小如何。如果shmget
大于现有细分的大小,则size
函数将失败,因此使用一个函数可确保它不会失败。