只学习使用了system V的共享内存,无所谓了,反正都兼容。

 

ipckey=ftok("/home1/xiangyz/shmm/",0);

ftok有两个参数,一个是字符串,一个是字符。字符串就是共享内存的地址,字符一般用来标记这个标识符所标识的共享内存是这个进程所开辟的第几个共享内存。ftok()会返回一个key_t型的值,也就是计算出来的标识符的值。

 

 

int     shmget( key_t shmkey , int shmsiz , int flag );

第二个参数是内存大小的值,如果是获取已存在的内存,则写0;

例:id=shmget(ipckey, 0, SVSHM_MODE);


void    *shmat( int shmid , char *shmaddr , int shmflag );

例:ptr=shmat(id, NULL, 0);


int     shmdt( char *shmaddr );

例:shmdt(ptr);

 

int shmctl(int shmid, int cmd, struct shmid_ds *buff);

可用该函数来获取共享内存的信息:buff。

例:

struct shmid_ds buff;

shmctl(id, IPC_STAT, &buff);

buff.shm_segsz就是共享内存的大小。