00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 #ifndef ACE_MEM_MAP_H
00014 #define ACE_MEM_MAP_H
00015 
00016 #include  "ace/pre.h"
00017 
00018 #include  "ace/ACE_export.h"
00019 
00020 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00021 # pragma once
00022 #endif 
00023 
00024 #include "ace/Global_Macros.h"
00025 #include "ace/os_include/sys/os_mman.h"
00026 #include "ace/os_include/os_limits.h"
00027 #include "ace/os_include/os_fcntl.h"
00028 #include "ace/Default_Constants.h"
00029 
00030 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 class ACE_Export ACE_Mem_Map
00041 {
00042 public:
00043   
00044 
00045 
00046   ACE_Mem_Map (void);
00047 
00048 
00049 
00050   ACE_Mem_Map (ACE_HANDLE handle,
00051                size_t length = static_cast<size_t> (-1),
00052                int prot = PROT_RDWR,
00053                int share = ACE_MAP_PRIVATE,
00054                void *addr = 0,
00055                ACE_OFF_T offset = 0,
00056                LPSECURITY_ATTRIBUTES sa = 0);
00057 
00058 
00059   ACE_Mem_Map (const ACE_TCHAR *filename,
00060                size_t length = static_cast<size_t> (-1),
00061                int flags = O_RDWR | O_CREAT,
00062                mode_t mode = ACE_DEFAULT_FILE_PERMS,
00063                int prot = PROT_RDWR,
00064                int share = ACE_MAP_PRIVATE,
00065                void *addr = 0,
00066                ACE_OFF_T offset = 0,
00067                LPSECURITY_ATTRIBUTES sa = 0);
00068 
00069 
00070 
00071   int map (ACE_HANDLE handle,
00072            size_t length = static_cast<size_t> (-1),
00073            int prot = PROT_RDWR,
00074            int share = ACE_MAP_PRIVATE,
00075            void *addr = 0,
00076            ACE_OFF_T offset = 0,
00077            LPSECURITY_ATTRIBUTES sa = 0);
00078 
00079 
00080   int map (size_t length = static_cast<size_t> (-1),
00081            int prot = PROT_RDWR,
00082            int share = ACE_MAP_PRIVATE,
00083            void *addr = 0,
00084            ACE_OFF_T offset = 0,
00085            LPSECURITY_ATTRIBUTES sa = 0);
00086 
00087 
00088   int map (const ACE_TCHAR *filename,
00089            size_t length = static_cast<size_t> (-1),
00090            int flags = O_RDWR | O_CREAT,
00091            mode_t mode = ACE_DEFAULT_FILE_PERMS,
00092            int prot = PROT_RDWR,
00093            int share = ACE_MAP_PRIVATE,
00094            void *addr = 0,
00095            ACE_OFF_T offset = 0,
00096            LPSECURITY_ATTRIBUTES sa = 0);
00097 
00098 
00099   ~ACE_Mem_Map (void);
00100 
00101 
00102   int open (const ACE_TCHAR *filename,
00103             int flags = O_RDWR | O_CREAT,
00104             mode_t perms = ACE_DEFAULT_FILE_PERMS,
00105             LPSECURITY_ATTRIBUTES sa = 0);
00106 
00107 
00108   int close (void);
00109 
00110 
00111   int close_handle (void);
00112 
00113 
00114 
00115 
00116 
00117 
00118   int close_filemapping_handle (void);
00119 
00120 
00121 
00122   int operator () (void *&addr);
00123 
00124 
00125   void *addr (void) const;
00126 
00127 
00128 
00129   size_t size (void) const;
00130 
00131 
00132   int unmap (ssize_t len = -1);
00133 
00134 
00135   int unmap (void *addr, ssize_t len);
00136 
00137 
00138 
00139 
00140 
00141 
00142   int sync (size_t len, int flags = MS_SYNC);
00143 
00144 
00145 
00146 
00147 
00148   int sync (int flags = MS_SYNC);
00149 
00150 
00151 
00152   int sync (void *addr, size_t len, int flags = MS_SYNC);
00153 
00154 
00155 
00156 
00157 
00158   int protect (size_t len, int prot = PROT_RDWR);
00159 
00160 
00161 
00162 
00163 
00164   int protect (int prot = PROT_RDWR);
00165 
00166 
00167 
00168   int protect (void *addr, size_t len, int prot = PROT_RDWR);
00169 
00170 
00171   int remove (void);
00172 
00173 
00174   int advise (int behavior, int len = -1);
00175 
00176 
00177   ACE_HANDLE handle (void) const;
00178 
00179 
00180   const ACE_TCHAR *filename (void) const;
00181 
00182 
00183   void dump (void) const;
00184 
00185 
00186   ACE_ALLOC_HOOK_DECLARE;
00187 
00188 private:
00189 
00190 
00191 
00192   int map_it (ACE_HANDLE handle,
00193               size_t len = static_cast<size_t> (-1),
00194               int prot = PROT_RDWR,
00195               int share = MAP_SHARED,
00196               void *addr = 0,
00197               ACE_OFF_T offset = 0,
00198               LPSECURITY_ATTRIBUTES sa = 0);
00199 
00200   
00201   ACE_Mem_Map (const ACE_Mem_Map &);
00202   void operator = (const ACE_Mem_Map &);
00203 
00204 private:
00205 
00206 
00207   void *base_addr_;
00208 
00209 
00210   ACE_TCHAR filename_[MAXPATHLEN + 1];
00211 
00212 
00213   size_t length_;
00214 
00215 
00216   ACE_HANDLE handle_;
00217 
00218 
00219   ACE_HANDLE file_mapping_;
00220 
00221 
00222 
00223   bool close_handle_;
00224 
00225 };
00226 
00227 ACE_END_VERSIONED_NAMESPACE_DECL
00228 
00229 #if defined (__ACE_INLINE__)
00230 #include "ace/Mem_Map.inl"
00231 #endif 
00232 
00233 #include  "ace/post.h"
00234 
00235 #endif