Improve shared data module.

This commit is contained in:
fancy 2023-11-02 09:19:32 -07:00
parent 169ac7a0dd
commit 8ff62492e0
4 changed files with 31 additions and 9 deletions

View File

@ -56,16 +56,16 @@ namespace SharedDataTest
SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID); SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID);
if (nullptr != sharedDataMinor) if (nullptr != sharedDataMinor)
{ {
int writableData = 9; int writableData = 122;
IMakeSharedData(sharedDataMinor, sizeof(int), sizeof(int)); IMakeSharedData(sharedDataMinor, sizeof(int) * 200, sizeof(int));
ISetWritableData(sharedDataMinor, &writableData, sizeof(int)); ISetWritableData(sharedDataMinor, &writableData, sizeof(int));
} }
if (nullptr != sharedDataPrimary) if (nullptr != sharedDataPrimary)
{ {
int readableData = -1; int readableData[200] = {0};
IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); IMakeSharedData(sharedDataPrimary, sizeof(int) * 200, sizeof(int));
IGetReadableData(sharedDataPrimary, &readableData, sizeof(int)); IGetReadableData(sharedDataPrimary, &readableData, sizeof(int));
LogInfo("readableData = %d\n", readableData); LogInfo("readableData = %d\n", readableData[0]);
IFree(sharedDataPrimary); IFree(sharedDataPrimary);
} }
if (nullptr != sharedDataMinor) if (nullptr != sharedDataMinor)

View File

@ -53,9 +53,9 @@ extern "C"
{ {
object->mSetWritableData(object, buf, bufLength); 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 #ifdef __cplusplus
} }

View File

@ -71,6 +71,11 @@ void SharedDataCpp::WritableDataInit(void)
} }
void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength) 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 (SHARER_NAME_PRIMARY == mSharerName && bufLength == mPrimaryReadSize)
{ {
if (memcmp((char *)mSharedMemeory, USER_NAME_INIT_NAME, USER_NAME_BUF_LENGTH) == 0) 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) 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) if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mMinorReadSize)
{ {
memcpy((char *)mSharedMemeory + sizeof(UserDataHeader) * THERE_TWO_USER_DATA_HEADER + mPrimaryReadSize, 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))); SharedDataImpl *object = ((SharedDataImpl *)(((char *)ptr) - sizeof(SharedDataHeader)));
if (SHARED_DATA_NAME == object->mHeader.mCheckName) if (SHARED_DATA_NAME == object->mHeader.mCheckName)
{ {
object->mSharedData->CleanSharedMemory();
object->mSharedData = nullptr; object->mSharedData = nullptr;
free(((char *)ptr) - sizeof(SharedDataHeader)); free(((char *)ptr) - sizeof(SharedDataHeader));
} }

View File

@ -44,14 +44,20 @@ StatusCode SharedMemory::MakeSharedMemory(const int &size)
mId = shmget(key, size, IPC_CREAT | 0666); mId = shmget(key, size, IPC_CREAT | 0666);
if (mId == SHMGET_FAILED) 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); 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); return CreateStatusCode(STATUS_CODE_OK);
} }
StatusCode SharedMemory::CleanSharedMemory(void) 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) if (shmctl(mId, IPC_RMID, NULL) < 0)
{ {
LogError("shmctl failed.\n"); LogError("shmctl failed.\n");
@ -61,5 +67,10 @@ StatusCode SharedMemory::CleanSharedMemory(void)
} }
void *SharedMemory::GetMemory(void) void *SharedMemory::GetMemory(void)
{ {
if (SHMGET_FAILED == mId)
{
LogError("mId error.\n");
return nullptr;
}
return shmat(mId, NULL, 0); return shmat(mId, NULL, 0);
} }