アットウィキロゴ

共有メモリ

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "CmnDefine.h"
#include "CmnStruct.h"
#include "CmnFunc.h"

/* ã§óLÉÅÉÇÉäÉAÉ^ÉbÉ` */
int Shm_Attach( key_t key, T_SHM_DATE** ptShmData, int* piShmID )
{
/* ÉpÉâÉÅÅ[É^É`ÉFÉbÉN */
if( NULL == piShmID || NULL == ptShmData )
{
ERRLOG( "piShmID=[%x]", piShmID );
return RET_NG;
}

/* ã§óLÉÅÉÇÉäópKeyéÊìæ */
//key = ftok( "", 'R' );
//if( key == -1 )
//{
// ERRLOG("ftok Error.");
// return RET_NG;
//}

/* ã§óLÉÅÉÇÉäIDéÊìæ */
*piShmID = shmget( key, sizeof(T_SHM_DATE), IPC_CREAT | 0666 );
if( *piShmID < 0 )
{
ERRLOG("shmget Error.");
return RET_NG;
}

DBGLOG( "*piShmID=[%d]", *piShmID );

/* ã§óLÉÅÉÇÉäÇ…ÉAÉ^ÉbÉ` */
*ptShmData = (T_SHM_DATE*)shmat( *piShmID, 0, 0 );
if( *ptShmData == (void*)-1 )
{
ERRLOG("shmat Error.");
return RET_NG;
}

DBGLOG( "*ptShmData=[%x]", *ptShmData );

return RET_OK;
}

/* ã§óLÉÅÉÇÉäÉfÉ^ÉbÉ` */
int Shm_Dettach( T_SHM_DATE* ptShmData, int iShmID )
{
int iRet = 0; // ï‘ãpíl

DBGLOG( "ptShmData=[%x]", ptShmData );

/* ã§óLÉÅÉÇÉäÉfÉ^ÉbÉ` */
iRet = shmdt( (void*)ptShmData );
if( iRet == -1 )
{
ERRLOG("shmat Error.");
ERRLOG("errno=[%s]", ERRNO);
return RET_NG;
}

/* ã§óLÉÅÉÇÉä */
//iRet = shmctl( iShmID, IPC_RMID, 0 );
//if( iRet == -1 )
//{
// ERRLOG("shmat Error.");
// return RET_NG;
//}

return RET_OK;
}
最終更新:2014年01月31日 09:06