免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 C/C++ /de/zero
最近访问板块 发新帖
查看: 1621 | 回复: 0
打印 上一主题 下一主题

[C] /de/zero [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-19 22:42 |只看该作者 |倒序浏览

  1. #include "head.h"

  2. #define SEM_NAME "/xiaozhu"

  3. int main(int argc, char **argv)
  4. {
  5.         int             i, fd, nloop, zero = 0;
  6.         int             *addr = NULL;
  7.         pid_t           pid;

  8.         fd = open("/dev/zero", O_RDWR);
  9.         if(fd == -1){
  10.                 perror("open /dev/zero");
  11.                 exit(1);
  12.         }

  13.         addr = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, \
  14.                         fd, 0);
  15.         if(addr == MAP_FAILED){
  16.                 perror("mmap error");
  17.                 exit(2);
  18.         }
  19.         close(fd);
  20.         setbuf(stdout, NULL);

  21.         pid = fork();
  22.         if(pid < 0){
  23.                 perror("fork error");
  24.                 exit(3);
  25.         }
  26.         if(pid == 0){
  27.                 printf("child: %ld\n", (*addr)++);
  28.                 printf("child  ptr address = %0x\n", addr);
  29.                 exit(0);
  30.         }
  31. sleep(1);
  32.         printf("parent: %ld\n", (*addr)++);
  33.         printf("parent ptr address = %0x\n", addr);
  34.         exit(0);
  35. }
复制代码

执行结果:
[xxxx@localhost chap12]$ ./a.out
child: 0
child  ptr address = b7f88000
parent: 1
parent ptr address = b7f88000

从/dev/zero读出的字节全为0,往里写的数据全被丢弃。
程序中父进程是如何从/dev/zero中读出1的呢?
mmap()的MAP_SHARED属性改成MAP_PRIVATE后,
[zuhf@localhost chap12]$ ./a.out
child: 0
child  ptr address = b7f88000
parent: 0
parent ptr address = b7f88000
MAP_PRIVATE表示对进程对共享内存所作的修改不改变底层支持的对象(这里是/dev/zero)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP