Improve shared data module.
This commit is contained in:
parent
169ac7a0dd
commit
8ff62492e0
|
@ -56,16 +56,16 @@ namespace SharedDataTest
|
|||
SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID);
|
||||
if (nullptr != sharedDataMinor)
|
||||
{
|
||||
int writableData = 9;
|
||||
IMakeSharedData(sharedDataMinor, sizeof(int), sizeof(int));
|
||||
int writableData = 122;
|
||||
IMakeSharedData(sharedDataMinor, sizeof(int) * 200, sizeof(int));
|
||||
ISetWritableData(sharedDataMinor, &writableData, sizeof(int));
|
||||
}
|
||||
if (nullptr != sharedDataPrimary)
|
||||
{
|
||||
int readableData = -1;
|
||||
IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int));
|
||||
int readableData[200] = {0};
|
||||
IMakeSharedData(sharedDataPrimary, sizeof(int) * 200, sizeof(int));
|
||||
IGetReadableData(sharedDataPrimary, &readableData, sizeof(int));
|
||||
LogInfo("readableData = %d\n", readableData);
|
||||
LogInfo("readableData = %d\n", readableData[0]);
|
||||
IFree(sharedDataPrimary);
|
||||
}
|
||||
if (nullptr != sharedDataMinor)
|
||||
|
|
|
@ -53,9 +53,9 @@ extern "C"
|
|||
{
|
||||
object->mSetWritableData(object, buf, bufLength);
|
||||
}
|
||||
static inline void IFree(void *ptr)
|
||||
static inline void IFree(SharedData *object)
|
||||
{
|
||||
((SharedData *)ptr)->mFree(ptr);
|
||||
object->mFree(object);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -71,6 +71,11 @@ void SharedDataCpp::WritableDataInit(void)
|
|||
}
|
||||
void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength)
|
||||
{
|
||||
if (nullptr == mSharedMemeory)
|
||||
{
|
||||
LogError("mSharedMemeory is nullptr, failed.\n");
|
||||
return;
|
||||
}
|
||||
if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mPrimaryReadSize)
|
||||
{
|
||||
if (memcmp((char *)mSharedMemeory, USER_NAME_INIT_NAME, USER_NAME_BUF_LENGTH) == 0)
|
||||
|
@ -104,6 +109,11 @@ void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength)
|
|||
}
|
||||
void SharedDataCpp::SetWritableMemory(void *buf, const unsigned int &bufLength)
|
||||
{
|
||||
if (nullptr == mSharedMemeory)
|
||||
{
|
||||
LogError("mSharedMemeory is nullptr, failed.\n");
|
||||
return;
|
||||
}
|
||||
if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mMinorReadSize)
|
||||
{
|
||||
memcpy((char *)mSharedMemeory + sizeof(UserDataHeader) * THERE_TWO_USER_DATA_HEADER + mPrimaryReadSize,
|
||||
|
@ -140,6 +150,7 @@ static void SharedDataImplFree(void *ptr)
|
|||
SharedDataImpl *object = ((SharedDataImpl *)(((char *)ptr) - sizeof(SharedDataHeader)));
|
||||
if (SHARED_DATA_NAME == object->mHeader.mCheckName)
|
||||
{
|
||||
object->mSharedData->CleanSharedMemory();
|
||||
object->mSharedData = nullptr;
|
||||
free(((char *)ptr) - sizeof(SharedDataHeader));
|
||||
}
|
||||
|
|
|
@ -44,14 +44,20 @@ StatusCode SharedMemory::MakeSharedMemory(const int &size)
|
|||
mId = shmget(key, size, IPC_CREAT | 0666);
|
||||
if (mId == SHMGET_FAILED)
|
||||
{
|
||||
LogError("shmget failed.\n");
|
||||
printf("errno = %d, errmsg = %s\n", errno, strerror(errno));
|
||||
LogError("shmget failed. memory size = %d\n", size);
|
||||
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||
}
|
||||
LogInfo("Make shared memory succeed.\n");
|
||||
LogInfo("Make shared memory succeed. memory size = %d\n", size);
|
||||
return CreateStatusCode(STATUS_CODE_OK);
|
||||
}
|
||||
StatusCode SharedMemory::CleanSharedMemory(void)
|
||||
{
|
||||
if (SHMGET_FAILED == mId)
|
||||
{
|
||||
LogError("mId error.\n");
|
||||
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||
}
|
||||
if (shmctl(mId, IPC_RMID, NULL) < 0)
|
||||
{
|
||||
LogError("shmctl failed.\n");
|
||||
|
@ -61,5 +67,10 @@ StatusCode SharedMemory::CleanSharedMemory(void)
|
|||
}
|
||||
void *SharedMemory::GetMemory(void)
|
||||
{
|
||||
if (SHMGET_FAILED == mId)
|
||||
{
|
||||
LogError("mId error.\n");
|
||||
return nullptr;
|
||||
}
|
||||
return shmat(mId, NULL, 0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user