#ifndef _GAMA_NETWORKLIB_MEMORY_MAPPED_FILE_ #define _GAMA_NETWORKLIB_MEMORY_MAPPED_FILE_ #include #include // forward decl class CMemoryMappedFile; class CFileMappedView { public: CFileMappedView(CMemoryMappedFile& mappedFile); ~CFileMappedView(); // ÆÄÀÏÀ» ¸ÅÇÎÇØ¼­ Æ÷ÀÎÅ͸¦ ¾ò¾î ¿Â´Ù. void* GetPointer(DWORD dwLowPosition = 0, DWORD dwHighPosition = 0, DWORD dwMappingSize = 0); void Flush(DWORD dwBytesToFlush = 0); // ±â·ÏÇÑ °ÍÀ» FlushÇÑ´Ù. (IPC¿¡¼­ ÇÊ¿ä) void Close(); // ÆÄÀÏÀ» ´Ý´Â´Ù. private: CMemoryMappedFile& m_MappedFile; void* m_FilePointer; }; class CMemoryMappedFile { public: enum OpenMode { READ, READ_WRITE }; CMemoryMappedFile(); ~CMemoryMappedFile(); // ÀÌ¹Ì Á¸ÀçÇÏ´Â ÆÄÀÏÀ» ¿¬´Ù. bool OpenFile(const char* szFileName, OpenMode eOpenMode); // ¸Þ¸ð¸®¿¡ ÆÄÀÏÀ» »ý¼ºÇϰųª ¿¬´Ù. bool CreateSharedMemory(DWORD dwLowSize, DWORD dwHighSize = 0, const char* szFileName = 0); bool OpenSharedMemory(const char* szFileName, OpenMode eOpenMode); bool IsOpen(); // ÀÌ¹Ì ¿­·Á ÀÖ´ÂÁö »ìÇÉ´Ù. void Close(); // ¿­·Á ÀÖ´Â ÆÄÀÏÀ» ´Ý´Â´Ù. // ¿­·Á ÀÖ´Â °ÍÀÌ ÆÄÀÏÀ̸é, ÆÄÀÏÀÇ Å©±â¸¦ ÁØ´Ù. bool GetFileSize(unsigned long& dwLowSize, unsigned long& dwHighSize); private: // ÆÄÀÏ ºä¸¦ »ý¼ºÇÑ´Ù. void* GetFileView(DWORD dwLowPosition, DWORD dwHighPosition = 0, DWORD dwMappingSize = 0); static bool FlushFileView(void* lpView, DWORD dwBytesToFlush); // ÆÄÀÏ ºä¸¦ FlushÇÑ´Ù. static bool CloseFileView(void* lpView); // ÆÄÀÏ ºä¸¦ ´Ý´Â´Ù. HANDLE m_hFile; HANDLE m_hMap; DWORD m_dwFileViewMode; friend class CFileMappedView; }; #endif