Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1064112
  • 博文数量: 284
  • 博客积分: 8223
  • 博客等级: 中将
  • 技术积分: 3188
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-01 13:26
文章分类

全部博文(284)

文章存档

2012年(18)

2011年(33)

2010年(83)

2009年(147)

2008年(3)

分类: C/C++

2009-07-09 14:34:37

  折腾一个共享posix内存,搞了将近一个星期,结果发现是自己的程序变量有问题,着实觉着有点冤枉。不管了,先把学习的成果晒出来:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define NAME "/tmp"
int main(int argc,char **argv)
{
   int shm_id, pid, status;
   struct stat buf;
   int *ptr;
  
   pid = fork();
   if(pid ==0) {
       sleep(2);
       shm_id=shm_open(NAME, O_RDWR, 0644);
       ftruncate(shm_id,sizeof(int));
       fstat(shm_id,&buf);
       ptr=(int*)mmap(NULL,buf.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);
       *ptr= 100;
   }else{
      shm_id=shm_open(NAME,O_RDWR|O_CREAT,0644);
      if(shm_id < 0) {
         printf("err\n");
         exit(0);
      }
      ftruncate(shm_id,sizeof(int));
      ptr=(int*)mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);
      if(ptr==MAP_FAILED) {
         printf("err ptr=%d\n",ptr);
         printf("errno=%d\n", errno);
         exit(0);
      }
      *ptr= 0;
      waitpid(pid, &status, 0);
      printf("now *ptr=%d\n", *ptr);
      shm_unlink(NAME);/*删除共享内存区*/
   }
}
编译文件makefile:
all : clean mem
.PHONY : all
clean :
 -rm *.o mem core
mem : mem.o
 cc -g -lrt -o mem mem.o
mem.o : mem.c
 cc -g -lrt -c mem.c
阅读(646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~