寫在前面:小生純業餘選手,開此博僅僅是爲了積累,純當筆記來用。如有看官光臨小生博客,請不要相信我的代碼就是正確的。如果您發現了錯誤也懇請耽誤您一點時間,請您在下面指出來,不勝感激!
如果發現一些筆記的說法完全是錯誤的請建議我刪除!
如下是基於無序文件的通信代碼,代碼中通過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;
}