Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
acgl
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ACGL
acgl
Commits
8c672f65
Commit
8c672f65
authored
May 14, 2014
by
Martin Schultz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* implemented posix compliant version of memorymappedFile
parent
02a18624
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
82 additions
and
18 deletions
+82
-18
include/ACGL/Utils/MemoryMappedFile.hh
include/ACGL/Utils/MemoryMappedFile.hh
+4
-4
include/ACGL/Utils/MemoryMappedFilePosixImpl.hh
include/ACGL/Utils/MemoryMappedFilePosixImpl.hh
+8
-1
src/ACGL/Utils/MemoryMappedFilePosixImpl.cc
src/ACGL/Utils/MemoryMappedFilePosixImpl.cc
+66
-9
src/ACGL/Utils/MemoryMappedFileWinImpl.cc
src/ACGL/Utils/MemoryMappedFileWinImpl.cc
+4
-4
No files found.
include/ACGL/Utils/MemoryMappedFile.hh
View file @
8c672f65
...
...
@@ -54,8 +54,8 @@ namespace ACGL{
////////////////////////////////////////////////////////////////
enum
shareMode
{
MAP_PRIVATE
,
MAP_SHARED
MAP
PING
_PRIVATE
,
MAP
PING
_SHARED
};
////////////////////////////////////////////////////////////////
...
...
@@ -99,7 +99,7 @@ namespace ACGL{
********************************************************************/
MemoryMappedFile
(
const
char
*
_fileName
,
accessMode
_accessMode
=
accessMode
::
READ_ONLY
,
shareMode
_shareMode
=
shareMode
::
MAP
_PRIVATE
,
shareMode
_shareMode
=
shareMode
::
MAP
PING_PRIVATE
,
size_t
_length
=
0
,
off_t
_offset
=
0
);
...
...
@@ -125,4 +125,4 @@ namespace ACGL{
};
}
}
\ No newline at end of file
}
include/ACGL/Utils/MemoryMappedFilePosixImpl.hh
View file @
8c672f65
...
...
@@ -24,5 +24,12 @@
off_t
length
();
off_t
length
()
const
;
~
MemoryMappedFilePosixImpl
();
private:
int
mFileHandle
;
off_t
mPageOffset
;
off_t
mLength
;
char
*
mpData
;
int
mErrorCode
;
};
#endif
\ No newline at end of file
#endif
src/ACGL/Utils/MemoryMappedFilePosixImpl.cc
View file @
8c672f65
...
...
@@ -6,49 +6,106 @@
#pragma once
#ifdef __unix
#include "ACGL/Utils/MemoryMappedFilePosixImpl.hh"
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
MemoryMappedFilePosixImpl
::
MemoryMappedFilePosixImpl
(
const
char
*
_fileName
,
ACGL
::
Utils
::
MemoryMappedFile
::
accessMode
_accessMode
,
ACGL
::
Utils
::
MemoryMappedFile
::
shareMode
_shareMode
,
size_t
_length
,
off_t
_offset
)
off_t
_offset
)
:
mFileHandle
(
NULL
),
mPageOffset
(
0
),
mpData
(
nullptr
),
mErrorCode
(
0
)
{
int
pageAccess
=
0
;
int
pageShare
=
0
;
if
(
_shareMode
==
ACGL
::
Utils
::
MemoryMappedFile
::
MAPPING_SHARED
)
pageShare
=
MAP_SHARED
;
else
pageShare
=
MAP_PRIVATE
;
if
(
_accessMode
==
ACGL
::
Utils
::
MemoryMappedFile
::
READ_ONLY
)
{
mFileHandle
=
open
(
_fileName
,
O_RDONLY
);
pageAccess
=
PROT_READ
;
}
else
{
mFileHandle
=
open
(
_fileName
,
O_RDWR
);
pageAccess
=
PROT_READ
|
PROT_WRITE
;
}
if
(
mFileHandle
==
NULL
)
{
mErrorCode
=
2
;
ACGL
::
Utils
::
error
()
<<
"Could not map the File: "
<<
_fileName
<<
" to Ram. File was not found"
<<
std
::
endl
;
return
;
}
if
(
_length
<=
0
)
{
struct
stat
fileStat
;
stat
(
_fileName
,
&
fileStat
);
mLength
=
fileStat
.
st_size
;
}
if
(
_offset
>
0
)
{
mPageOffset
=
_offset
%
sysconf
(
_SC_PAGE_SIZE
);
mLength
-=
_offset
;
}
mpData
=
reinterpret_cast
<
char
*>
(
mmap
(
nullptr
,
mLength
,
pageAccess
,
pageShare
,
mFileHandle
,
_offset
-
mPageOffset
));
if
(
!
mpData
)
{
ACGL
::
Utils
::
error
()
<<
"could not map the File: "
<<
_fileName
<<
" to Ram. Error when calling mmap (are you shure offset and length are correct?)"
<<
std
::
endl
;
}
}
char
*
MemoryMappedFilePosixImpl
::
data
()
{
return
0
;
return
mpData
;
}
const
char
*
MemoryMappedFilePosixImpl
::
data
()
const
{
return
0
;
return
mpData
;
}
int
MemoryMappedFilePosixImpl
::
errorCode
()
{
return
0
;
return
mErrorCode
;
}
int
MemoryMappedFilePosixImpl
::
errorCode
()
const
{
return
0
;
return
mErrorCode
;
}
off_t
MemoryMappedFilePosixImpl
::
pageOffset
()
{
return
0
;
return
mPageOffset
;
}
off_t
MemoryMappedFilePosixImpl
::
pageOffset
()
const
{
return
0
;
return
mPageOffset
;
}
off_t
MemoryMappedFilePosixImpl
::
length
()
{
return
0
;
return
mLength
;
}
off_t
MemoryMappedFilePosixImpl
::
length
()
const
{
return
0
;
return
mLength
;
}
MemoryMappedFilePosixImpl
::~
MemoryMappedFilePosixImpl
()
{
if
(
mpData
)
munmap
(
mpData
,
mLength
);
if
(
mFileHandle
)
close
(
mFileHandle
);
}
#endif
src/ACGL/Utils/MemoryMappedFileWinImpl.cc
View file @
8c672f65
...
...
@@ -35,7 +35,7 @@ MemoryMappedFileWinImpl::MemoryMappedFileWinImpl(
//
/////////////////////////////////////////////////////
if
(
_shareMode
==
ACGL
::
Utils
::
MemoryMappedFile
::
MAP_SHARED
)
if
(
_shareMode
==
ACGL
::
Utils
::
MemoryMappedFile
::
MAP
PING
_SHARED
)
{
fileShare
=
FILE_SHARE_READ
|
FILE_SHARE_WRITE
;
...
...
@@ -82,7 +82,7 @@ MemoryMappedFileWinImpl::MemoryMappedFileWinImpl(
SYSTEM_INFO
info
;
GetSystemInfo
(
&
info
);
mPageOffset
=
_offset
%
info
.
dwAllocationGranularity
;
mapSize
-=
(
_offset
-
mPageOffset
);
mapSize
-=
(
_offset
);
}
if
(
_length
>
0
)
{
...
...
@@ -98,7 +98,7 @@ MemoryMappedFileWinImpl::MemoryMappedFileWinImpl(
}
//create the file mapping view
mpData
=
reinterpret_cast
<
PCHAR
>
(
MapViewOfFile
(
mFileMappingHandle
,
mapViewAccess
,
offsetHigh
,
offsetLow
-
mPageOffset
,
mapSize
));
(
MapViewOfFile
(
mFileMappingHandle
,
mapViewAccess
,
offsetHigh
,
offsetLow
,
mapSize
));
if
(
!
mpData
)
{
mErrorCode
=
GetLastError
();
...
...
@@ -148,4 +148,4 @@ MemoryMappedFileWinImpl::~MemoryMappedFileWinImpl()
CloseHandle
(
mFileHandle
);
}
#endif
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment