Linux進程間的通信-基於無序文件

寫在前面:小生純業餘選手,開此博僅僅是爲了積累,純當筆記來用。如有看官光臨小生博客,請不要相信我的代碼就是正確的。如果您發現了錯誤也懇請耽誤您一點時間,請您在下面指出來,不勝感激!

如果發現一些筆記的說法完全是錯誤的請建議我刪除!



如下是基於無序文件的通信代碼,代碼中通過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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章