int JVMP_shmdt(const void *shmaddr, int shmid) { int rval, i; DEL_SHM(i, shmid); rval = shmdt(shmaddr); return rval; }
/******************************************* *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; }