git-svn-id: svn://db.shs.com.ru/pip@489 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
#include "piincludes_p.h"
|
#include "piincludes_p.h"
|
||||||
#include "pisharedmemory.h"
|
#include "pisharedmemory.h"
|
||||||
|
#if defined(LINUX) || defined(MAC_OS)
|
||||||
|
# define SHM_POSIX
|
||||||
|
#endif
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -25,9 +28,10 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef MAC_OS
|
#ifdef MAC_OS
|
||||||
|
//# include <fcntl.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
# include <fcntl.h>
|
# include <fcntl.h>
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
# include <sys/mman.h>
|
# include <sys/mman.h>
|
||||||
@@ -62,7 +66,7 @@ PRIVATE_DEFINITION_START(PISharedMemory)
|
|||||||
HANDLE map;
|
HANDLE map;
|
||||||
void * data;
|
void * data;
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
void * data;
|
void * data;
|
||||||
bool owner;
|
bool owner;
|
||||||
#endif
|
#endif
|
||||||
@@ -108,7 +112,7 @@ bool PISharedMemory::openDevice() {
|
|||||||
}
|
}
|
||||||
//piCout << PRIVATE->map << PRIVATE->data;
|
//piCout << PRIVATE->map << PRIVATE->data;
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
PRIVATE->name = ("/pip_shm_" + path()).toByteArray();
|
PRIVATE->name = ("/pip_shm_" + path()).toByteArray();
|
||||||
PRIVATE->name.push_back(0);
|
PRIVATE->name.push_back(0);
|
||||||
int fd = shm_open((const char *)PRIVATE->name.data(), O_RDWR, 0777);
|
int fd = shm_open((const char *)PRIVATE->name.data(), O_RDWR, 0777);
|
||||||
@@ -143,7 +147,7 @@ bool PISharedMemory::closeDevice() {
|
|||||||
if (PRIVATE->data) UnmapViewOfFile(PRIVATE->data);
|
if (PRIVATE->data) UnmapViewOfFile(PRIVATE->data);
|
||||||
if (PRIVATE->map) CloseHandle(PRIVATE->map);
|
if (PRIVATE->map) CloseHandle(PRIVATE->map);
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
//piCoutObj << "close" << PIString(PRIVATE->name) << PRIVATE->data;
|
//piCoutObj << "close" << PIString(PRIVATE->name) << PRIVATE->data;
|
||||||
if (PRIVATE->data) munmap(PRIVATE->data, dsize);
|
if (PRIVATE->data) munmap(PRIVATE->data, dsize);
|
||||||
if (PRIVATE->owner) {
|
if (PRIVATE->owner) {
|
||||||
@@ -183,7 +187,7 @@ void PISharedMemory::initPrivate() {
|
|||||||
PRIVATE->map = 0;
|
PRIVATE->map = 0;
|
||||||
PRIVATE->data = 0;
|
PRIVATE->data = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
PRIVATE->data = 0;
|
PRIVATE->data = 0;
|
||||||
PRIVATE->owner = false;
|
PRIVATE->owner = false;
|
||||||
#endif
|
#endif
|
||||||
@@ -195,7 +199,7 @@ PIByteArray PISharedMemory::readAll() {
|
|||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
if (!PRIVATE->data) return PIByteArray();
|
if (!PRIVATE->data) return PIByteArray();
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
if (!PRIVATE->data) return PIByteArray();
|
if (!PRIVATE->data) return PIByteArray();
|
||||||
#endif
|
#endif
|
||||||
PIByteArray a(dsize);
|
PIByteArray a(dsize);
|
||||||
@@ -229,7 +233,7 @@ int PISharedMemory::read(void * read_to, int max_size, int offset) {
|
|||||||
CopyMemory(read_to, &(((char*)(PRIVATE->data))[offset]), max_size);
|
CopyMemory(read_to, &(((char*)(PRIVATE->data))[offset]), max_size);
|
||||||
return max_size;
|
return max_size;
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
if (!PRIVATE->data) return -1;
|
if (!PRIVATE->data) return -1;
|
||||||
memcpy(read_to, &(((char*)(PRIVATE->data))[offset]), max_size);
|
memcpy(read_to, &(((char*)(PRIVATE->data))[offset]), max_size);
|
||||||
return max_size;
|
return max_size;
|
||||||
@@ -249,7 +253,7 @@ int PISharedMemory::write(const void * data, int max_size, int offset) {
|
|||||||
CopyMemory(&(((char*)(PRIVATE->data))[offset]), data, max_size);
|
CopyMemory(&(((char*)(PRIVATE->data))[offset]), data, max_size);
|
||||||
return max_size;
|
return max_size;
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINUX
|
#ifdef SHM_POSIX
|
||||||
if (!PRIVATE->data) return -1;
|
if (!PRIVATE->data) return -1;
|
||||||
memcpy(&(((char*)(PRIVATE->data))[offset]), data, max_size);
|
memcpy(&(((char*)(PRIVATE->data))[offset]), data, max_size);
|
||||||
return max_size;
|
return max_size;
|
||||||
|
|||||||
Reference in New Issue
Block a user