Chinaunix首页 | 论坛 | 博客
  • 博客访问: 115231
  • 博文数量: 42
  • 博客积分: 916
  • 博客等级: 准尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-16 10:01
文章分类

全部博文(42)

文章存档

2011年(42)

分类: C/C++

2011-07-30 11:26:06

ftok函数原型:key_t ftok(const char *path,int id);
如果path相同的情况下,id不同就会得到不同的key,如果id相同那么不同进程得到的key是一样的。

shmget,shmat,shmdt,shmctl,共享内存的相关函数。
下面这一段代码,看完之后你就大概知道什么意思了:
  1. #include <stdio.h>
  2. #include <sys/shm.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>

  5. int shmid;
  6. char *shmadd;
  7. struct shmid_ds shmbuf;

  8. void t_shm_op()
  9. {
  10.   if((shmid = shmget(IPC_PRIVATE,1000,0666)) < 0)
  11. //这里的第三个参数可以写为0666|IPC_CREAT|IPC_EXCL,意思shm没有的话就创建,如果有的话就出错,如果为0666|IPC_CREAT,意思是shm没有的话就创建,如果还有的话就不创建了返回已经存在的shmid。
  12.   {
  13.     perror("shmget:");
  14.     exit(1);
  15.   }
  16.   else
  17.     printf("create shared -memory:%d \n",shmid);
  18.   system("ipcs -m");

  19.   if((shmadd = shmat(shmid,0,0)) < (char*)0)
  20.   {
  21.     perror("shmat");
  22.     exit(1);
  23.   }
  24.   else
  25.     printf("attached shared-memory,%s\n",shmadd);
  26.   system("ipcs -m");

  27.   if(shmdt(shmadd) < 0)
  28.   {
  29.     perror("shmdt");
  30.     exit(1);
  31.   }
  32.   else
  33.     printf("deleted shared-memory\n");
  34.   system("ipcs -m");

  35.   if((shmctl(shmid,IPC_RMID,&shmbuf)) < 0)
  36.   {
  37.     perror("shmctl");
  38.     exit(1);
  39.   }
  40.   system("ipcs -m");
  41. }
    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;
    }

阅读(1019) | 评论(0) | 转发(0) |
0

上一篇:c 预编译用途小记

下一篇:c 嵌套注释

给主人留下些什么吧!~~