IPC技术_Windows平台_C#读取_C#写入

前文:本文WINDOW平台下,用C++或C#实现共享内存。合计四个帖子,这是其中之一

××××

正文开始之前,有必要说明一下,在C#语境下, 只有双方(读方 或写方)对物理内存的占用都结束了, 物理内存才会被Window系统释放

×××

 写入共享内存的程序

using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Threading;


namespace Memory_Write
{
    class Program
    {
        static void Main(string[] args)
        {
            using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("lipan", 1024000, MemoryMappedFileAccess.ReadWrite))
            {
                using (MemoryMappedViewStream stream = mmf.CreateViewStream())
                {
                    var writer = new BinaryWriter(stream);
                    for (int i = 0; i < 500; i++)
                    {
                        writer.Write(i);
                        Console.WriteLine("{0}位置写入流:{0}", i);
                        Thread.Sleep(100);
                    }
                    Console.Read();
                }
            }
            Console.Read();
        }
    }
}

读取共享内存的程序

using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Threading;


namespace Memory_Read
{
    class Program
    {
        static void Main(string[] args)
        {
            using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("lipan", 1024000, MemoryMappedFileAccess.ReadWrite))
            {
                using (MemoryMappedViewStream stream = mmf.CreateViewStream())
                {
                    var reader = new BinaryReader(stream);
                    for (int i = 0; i < 500; i++)
                    {
                        Console.WriteLine("{1}位置:{0}", reader.ReadInt32(), i);
                        Thread.Sleep(10);
                    }
                }
            }
            Console.Read();
        }
    }
}

×××××

必要的说明:

1)代码中使用了 using 语法,这个不关键, 不会的人可以自行搜索

2)重点是读和写。在测试过程中,我发现 writer.Write(i);不是覆盖写入,而是在前一个写入的下面写入,读取也是类似的,这个非常诡异

3)读代码里面

修改了i变成1,效果如下

 这说明一个非常扯蛋地方:reader.ReadInt32()  ,他读取物理内存的位置,是通过次数来实现的, 从头开始读取。

同时也说明writer.Write(i); ,也是无法指定写入物理内存的位置,而是通过次数来实现的。

××

4)BinaryWriter和BinaryReader(二进制文件的读写)

这两个函数,不是共享内存独有的。 读写文件的时候,也可以用这两个函数

5)



BinaryWriter和BinaryReader(二进制文件的读写)_起个名字好难啊-CSDN博客

这个链接讲解了具体的指定字节读写方式

6)下面是指定读取字节的起始位置

BinaryWriter.Seek(Int32, SeekOrigin) 方法 (System.IO) | Microsoft Docs

运行效果

 

 7)指定写入流位置

  writer.Seek(4, SeekOrigin.Begin);//指定写入位置
                    writer.Write(22);//将内容写入

 ××

 ×××

终于可以自由实现的 读写了!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值