Пример #1
0
int JVMP_shmdt(const void *shmaddr, int shmid)
{
  int rval, i;
  
  DEL_SHM(i, shmid);
  rval = shmdt(shmaddr);
  return rval;
}
Пример #2
0
/*******************************************
*func name:
*function:
*parameters:
*call:
*called:
*return:
*/
int get_sq_list(int *shm_list_id,key_t *shm_list_key,unsigned long *num)
{
    int fd;
    unsigned long file_size = 0;
    char file_path[MAX_FILE_PATH_SIZE+1];
    char *file_cnt_buf = NULL;
    unsigned long line_num = 0;

    int shm_id;
    unsigned long shm_size;

    SQ_LIST_MEM_ID list_id = NULL;
    
    memset(file_path,0x00,MAX_FILE_PATH_SIZE+1);
   // sprintf(file_path,"%s/%s",SNAM_CFG_DIR,PMC_SQ_FILE_NAME);

    if (SAIL_OK != open_sq_list_file(file_path,&fd,&file_size))
    {
        error("[Err]Open usr list file error.\n");

        return ERR;
    }

    file_cnt_buf = (char *)malloc(file_size + 1);
    if (NULL == file_cnt_buf)
    {
        error("[Err]Malloc for usr list file fail.\n");
        close(fd);
        return ERR;
    }

    if (NULL == cfg_get_file_cnt(fd,file_cnt_buf,file_size))
    {
        error("[Err]Get usr list file content fail.\n");
        free(file_cnt_buf);
        close(fd);
        return ERR;
    }
    file_cnt_buf[file_size] = '\0';  
    close(fd);

    line_num = get_sq_list_num(file_cnt_buf);
    *num = line_num;

     g_max_shm_key += SHM_KEY_IVL;
     shm_size = SQ_LIST_MEM_SIZE*line_num;

    shm_id = shmget(g_max_shm_key,shm_size,IPC_CREAT|IPC_EXCL);
    if (shm_id < 0)
    {
        error("create usr list shm fail.");
        free(file_cnt_buf);
        return ERR;
    }

    *shm_list_id = shm_id;
    *shm_list_key = g_max_shm_key;

    list_id = (SQ_LIST_MEM_ID)shmat(shm_id,NULL,0);
    if (!list_id)
    {
        error("attach usr list shm fail.");
        free(file_cnt_buf);
        DEL_SHM(shm_id);
        return ERR;
    }

    (void)set_sq_list_buf(list_id,file_cnt_buf,line_num);

    free(file_cnt_buf);
    return OK;
}