c语言根据位置和大小初始化共享内存的函数

一般失败的原因是重复创建或者内存不足。

在嵌入式开发中一般是硬件错误导致的。

代码如下:


int shmId = 0;

/*********************************************************************
*NAME:initShrMem
*FUCTION:初始化共享内存
*PROCESS:初始化共享内存
*INPUT:shmKey:共享内存键
*INPUT:shmSize:共享内存大小
*RETURN:共享内存指针:正常结束
*:NULL:异常结束
 ********************************************************************/
char *initShrMem(int shmKey, int shmSize)
{
    char    *shmAddr;

    /*检查是否已经创建共享内存*/
    if (shmId)
        return NULL;

    /*创建共享内存*/
    if ((shmId = shmget(shmKey, shmSize, IPC_CREAT | IPC_EXCL | 0666)) == -1) {
#ifdef _DEBUG
        printf("initShrMem() shmget Error code=%d\n", errno);
#endif
        return FALSE;
    }

   
/*开始创建共享内存*/
    if ((int)(shmAddr = (char *)shmat(shmId, 0, 0)) == -1) {
#ifdef _DEBUG
        printf("initShrMem() shmat Error code=%d\n", errno);
#endif
        /*共享内存释放*/
        shmctl(shmId, IPC_RMID, NULL);
        shmId = 0;
        return FALSE;
    }
#ifdef _DEBUG
	printf("initShrMem shmAddr = %x\n",(int)shmAddr);
#endif
    /*共享内存初始化*/
    memset(shmAddr, '\0', shmSize);

    return (shmAddr);
}



编辑于:2020-05-21
 
 
推荐信息

 
c语言更多..

豆角代码分享 网站备案: 吉ICP备17006805号-3