ftok函数原型:key_t ftok(const char *path,int id);
如果path相同的情况下,id不同就会得到不同的key,如果id相同那么不同进程得到的key是一样的。
shmget,shmat,shmdt,shmctl,共享内存的相关函数。
下面这一段代码,看完之后你就大概知道什么意思了:
- #include <stdio.h>
-
#include <sys/shm.h>
-
#include <unistd.h>
-
#include <stdlib.h>
-
-
int shmid;
-
char *shmadd;
-
struct shmid_ds shmbuf;
-
-
void t_shm_op()
-
{
-
if((shmid = shmget(IPC_PRIVATE,1000,0666)) < 0)
- //这里的第三个参数可以写为0666|IPC_CREAT|IPC_EXCL,意思shm没有的话就创建,如果有的话就出错,如果为0666|IPC_CREAT,意思是shm没有的话就创建,如果还有的话就不创建了返回已经存在的shmid。
-
{
-
perror("shmget:");
-
exit(1);
-
}
-
else
-
printf("create shared -memory:%d \n",shmid);
-
system("ipcs -m");
-
-
if((shmadd = shmat(shmid,0,0)) < (char*)0)
-
{
-
perror("shmat");
-
exit(1);
-
}
-
else
-
printf("attached shared-memory,%s\n",shmadd);
-
system("ipcs -m");
-
-
if(shmdt(shmadd) < 0)
-
{
-
perror("shmdt");
-
exit(1);
-
}
-
else
-
printf("deleted shared-memory\n");
-
system("ipcs -m");
-
-
if((shmctl(shmid,IPC_RMID,&shmbuf)) < 0)
-
{
-
perror("shmctl");
-
exit(1);
-
}
-
system("ipcs -m");
- }
int main()
{
t_shm_op();
printf("%d\n",shmbuf.shm_segsz);
printf("%d\n",shmbuf.shm_perm.uid);
printf("%d\n",shmbuf.shm_perm.gid);
return 0;
}
阅读(1063) | 评论(0) | 转发(0) |