프로그래밍 노트

c#에서 파일 매핑한 공유 메모리를 읽고 쓰기 본문

C#/기타

c#에서 파일 매핑한 공유 메모리를 읽고 쓰기

떡잎 2017. 4. 3. 21:42


c#에서 파일 매핑한 공유 메모리를 읽고 쓰기



using System.Linq;

using System.Text;

using System.Windows.Forms;


using System.IO.MemoryMappedFiles;

using System.IO;



namespace ReadSharedMemory

{

    public partial class frmMain : Form

    {

        public frmMain()

        {

            InitializeComponent();

        }


        // 파일 매핑한 공유 메모리 읽기

        private void btnRead_Click(object sender, EventArgs e)

        {

            MemoryMappedFile mapFile = MemoryMappedFile.OpenExisting(

                "MemoryMapTest", 

                MemoryMappedFileRights.ReadWrite);


            using (Stream view = mapFile.CreateViewStream())

            {

                // stream을 String으로 변환

                view.Position = 0;

                using (StreamReader reader = new StreamReader(view, Encoding.UTF8))

                {

                    this.Text = reader.ReadToEnd();

                }

            }

        }



        // 파일 매핑한 공유 메모리 쓰기

        private void btnWrite_Click(object sender, EventArgs e)

        {

            // Mapping된 file 가져오기

            MemoryMappedFile mapFile = MemoryMappedFile.OpenExisting(

                "MemoryMapTest", 

                MemoryMappedFileRights.ReadWrite);

            

            MemoryMappedViewAccessor accessor = mapFile.CreateViewAccessor();


            // 공유 Memory에 쓰기

            byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(txtMemory.Text + "\0");

            accessor.WriteArray(0, Buffer, 0, Buffer.Length);


            accessor.Dispose();

            mapFile.Dispose();

        }


    }

}



여기에 쓰지는 않았지만 프로세스간 공유 메모리를 읽고 쓸 때에는 Mutex를 사용하여 동시에 읽고 쓰기를 하지 못하게 막아 주어야 된다.


Comments