Linux进程间的通信-基于无序文件

来源:互联网 发布:陈一发 整容 知乎 编辑:程序博客网 时间:2024/06/05 21:04

写在前面:小生纯业余选手,开此博仅仅是为了积累,纯当笔记来用。如有看官光临小生博客,请不要相信我的代码就是正确的。如果您发现了错误也恳请耽误您一点时间,请您在下面指出来,不胜感激!

如果发现一些笔记的说法完全是错误的请建议我删除!



如下是基于无序文件的通信代码,代码中通过mmap把文件映射到内存像处理数组一样处理文件,上面一段程序向fd所代表的文件中写数字,下面的程序从文件中读数据。

通过如下操作可以看出基于普通文件的通信机制有时候是靠不住的。

1.运行上面一段程序一小段时间后,再运行下面一段

2.同时运行两个程序一段时间后中止上一段程序的运行

3.同时运行两个程序一段时间后中止下面一段程序的运行,然后再开始下面一段程序的运行


#include<stdio.h>#include<fcntl.h>#include<sys/mman.h>#include<unistd.h>int main(){    int fd = open("tmp",O_RDWR|O_CREAT,0666);    ftruncate(fd,4);    int *p = static_cast<int*>(mmap(0,4,PROT_READ|PROT_WRITE,                    MAP_SHARED,fd,0));        int i = 0;    while(1)    {        sleep(1);        *p = i;        i++;    }    return 0;}


#include<stdio.h>#include<fcntl.h>#include<sys/mman.h>#include<unistd.h>int main(){    int fd = open("tmp",O_RDWR);    int *p = static_cast<int*>(mmap(0,4,PROT_READ|PROT_WRITE,                    MAP_SHARED,fd,0));        while(1)    {        sleep(1);        printf("%d\n",*p);    }    return 0;}



0 0