github源码指引:共享内存、数据结构与算法
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码目录:shmfc
相关专题:共享内存、数据结构与算法_初级代码游戏的博客-CSDN博客
目录
一、源码结构
二、编译、运行、初始设置
一、源码结构

东西比较多,不过层次性很强,基本的几个:
- makefile.mk 编译设置,会由脚本复制到makefile
- rebuild.sh 编译
- run.sh 运行
- shmfc_t.cpp main函数和很多测试代码
二、编译、运行、初始设置
执行rebuild.sh编译,如果顺利,会在../bin下得到shmfc.exe。
执行run.sh运行程序,初次运行大概是这样:
[08-23 16:59:10][应用][信息][shmfc_t.cpp : 793(main)][ 0.00]控制台窗口尺寸 ws_row=59 ws_col=189
[08-23 16:59:10][应用][信息][shmfc_t.cpp : 813(main)][ 0.00]
GUID = 8AA20E2E-4891-4df1-A87E-E5A23CB8D076
sizeof short= 2 int= 4 long= 8 byteorder= 10 = 24 1 = 68 2 = 998 3 = 999 4 = 1000
[08-23 16:59:10][应用][信息][shmfc_t.cpp : 822(main)][ 0.00]主机字节序与网络字节序不相同
[08-23 16:59:10][应用][信息][shmfc_t.cpp : 831(main)][ 0.00]00000001
未配置环境变量 MY_STD_ENV
读取文件出错 未配置环境变量 MY_STD_ENV未能打开文件
[08-23 16:59:10][应用][出错][shmEnv.cpp : 349(_Connect)][ 0.00]连接主共享内存失败
[08-23 16:59:10][应用][出错][shmfc_t.cpp : 835(main)][ 0.00]未能连接到主共享内存,请检查信息
Press any key to continue(q=exit ):
需要配置一个环境变量才能正确运行,输入q回车或者直接ctrl-c,然后设置环境变量:
export MY_STD_ENV=$HOME/my/third/ctfc/etc/
这个目录就是源码里面的etc目录,共享内存的配置文件和运行时生成的文件都在这里。
配好了再次运行:
[08-23 17:11:23][应用][信息][shmfc_t.cpp : 793(main)][ 0.00]控制台窗口尺寸 ws_row=59 ws_col=189
[08-23 17:11:23][应用][信息][shmfc_t.cpp : 813(main)][ 0.00]
GUID = 8AA20E2E-4891-4df1-A87E-E5A23CB8D076
sizeof short= 2 int= 4 long= 8 byteorder= 10 = 24 1 = 68 2 = 998 3 = 999 4 = 1000
[08-23 17:11:23][应用][信息][shmfc_t.cpp : 822(main)][ 0.00]主机字节序与网络字节序不相同
[08-23 17:11:23][应用][信息][shmfc_t.cpp : 831(main)][ 0.00]00000001
[08-23 17:11:23][应用][出错][shmEnv.cpp : 349(_Connect)][ 0.00]连接主共享内存失败
[08-23 17:11:23][应用][出错][shmfc_t.cpp : 835(main)][ 0.00]未能连接到主共享内存,请检查信息
Press any key to continue(q=exit ):
已经不提示环境变量问题了,但是主共享内存还没有创建(主共享内存记录所有其他共享内存的信息),输入回车:
[08-23 17:15:05][应用][信息] 用户输入的是:
[08-23 17:15:05][应用][信息][shmfc_t.cpp : 850(main)][ 0.00]
----------------------------------------
命令表:(q=exit)
0 管理
1 test_BinaryPool
3 test_CMultiProcessServer
4 test_CMultiProcessServer_view
5 test_CMultiProcessServer_speed
6 test_CMultiProcessServer_direct
7 test_RebuildSet
12 UDP测试客户端
13 UDP测试服务端
14 CStressTesting
15 CTestCSimpleMultiProcess_mutex atomic
16 CTest_hash
17 T_SHM_HASH
88 test_CMyRWMutex
89 test_T_SHM_SET_GROUP
90 test_shm_IActiveObject
91 test_ShmMultiMap
99 test_ParseFromXml
........................................
----------------------------------------
请选择命令:(q=exit default=17):
创建主共享内存在命令0里面,输入0然后回车:
[08-23 17:19:12][应用][信息] 用户输入的是:0
[08-23 17:19:12][应用][信息][CommandSet.h : 236(doCommandSet)][ 0.00]
命令表
命令 组 名称 命令 说明
---- ---------- ----------------- ---- --------------------------
0 系统管理 ShmEnvShow 0 显示主共享内存
1 系统管理 ShmEnvCreate 1 创建主共享内存
2 系统管理 SystemParamLoad 2 加载系统参数
3 系统管理 SystemParamSaveAs 3 系统参数另存为
4 系统管理 SystemParamClear 4 清空系统参数
5 系统管理 SystemParamDelete 5 删除系统参数
6 系统管理 SystemParamSet 6 设置系统参数10 信号量管理 SemShow 10 显示信号量
11 信号量管理 SemUnlock 11 解锁信号量101 工具 FindAllShm 101 查找全部共享内存
102 工具 FindCurrentShm 102 查找当前环境注册的共享内存
103 工具 ShowEnvShm 103 显示指定的ShmEnv
201 工具 ShowSysState 201 显示系统状态
---- ---------- ----------------- ---- --------------------------请选择命令:(--group选择命令组 b=break)(q=exit default=201):
输入1然后回车即可创建主共享内存:
[08-23 17:20:23][应用][信息] 用户输入的是:1
[08-23 17:20:23][应用][出错][shmEnv.cpp : 349(_Connect)][ 0.00]连接主共享内存失败
[08-23 17:20:23][应用][信息][shmEnv.cpp : 403(ShmEnvCreate)][ 0.00]创建主共享内存成功 shm_id= 0 size= 2900552
[08-23 17:20:23][应用][信息][shmEnv.cpp : 352(_Connect)][ 0.00]连接主共享内存成功 shm_id= 0 size= 2900552
[08-23 17:20:23][应用][信息][shmEnv.cpp : 424(ShmEnvCreate)][ 0.01]
GUID = 8AA20E2E-4891-4df1-A87E-E5A23CB8D076
sizeof short= 2 int= 4 long= 8 byteorder= 10 = 0 1 = 2900552 2 = 10240
[08-23 17:20:23][应用][信息][shmEnv.cpp : 434(ShmEnvCreate)][ 0.01]创建主共享内存成功 shm_id= 0 size= 2900552
[08-23 17:20:23][应用][信息][shmEnv.cpp : 718(GetSemReg)][ 0.01]没有找到sem注册信息 GLOBAL GlobalMutex 0
[08-23 17:20:23][应用][信息][shmEnv.h : 416(CGlobalMutex_Lock)][ 0.01]CGlobalMutex_Lock
[08-23 17:20:23][应用][信息][shmEnv.h : 421(CGlobalMutex_UnLock)][ 0.01]CGlobalMutex_UnLock
[08-23 17:20:23][应用][信息][CommandSet.h : 129(doCommand)][ 0.01]
命令 ShmEnvCreate 执行完毕 返回码 0
press any key to continue ... (q=exit ):
日志比较乱,看到最后“ 执行完毕 返回码 0”就可以了,在输入回车回到刚才的命令表,输入2,加载系统参数(etc/ctfc.ini),每个共享内存都有一个初始大小设置,加载完参数可以用命令0查看:
[08-23 17:23:38][应用][信息] 用户输入的是:0
[08-23 17:23:38][应用][信息][shmEnv.cpp : 105(Report)][ 0.01]
sem id 32768 ctime 20240823 172023-------------------------------------------
共享内存信息:i sys name part shmid segsz ctime ctime
- --- ---- ---- ----- ----- ----- -----
- --- ---- ---- ----- ----- ----- -----共计 0 个-------------------------------------------
信号量信息:i sys name part ctime ctime 写锁 写计数 读计数 写等待
- ------ ----------- ---- ---------- --------------- ---- ------ ------ ------
0 GLOBAL GlobalMutex 0 1724404823 20240823 172023 1 0 0 0
- ------ ----------- ---- ---------- --------------- ---- ------ ------ ------共计 1 个-------------------------------------------
参数信息:i section name param current
-- ---------- --------------------------- ------------------ -------0 SHM_CONFIG CTestShmIActiveObject link:$HOME/efc/etc1 SHM_CONFIG default.SHM_DB_TABLE_DEF 1002 SHM_CONFIG default.SHM_DB_COLUMN_DEF 1003 SHM_CONFIG default.SHM_DB_INDEX_DEF 1004 SHM_CONFIG default.SHM_DB_STRING_POOL 10000005 SHM_CONFIG default.SHM_DB_STRING_POOL# 10000006 SHM_CONFIG default.SHM_DB_DATA 100007 SHM_CONFIG default.SHM_DB_INDEX 100008 SHM_CONFIG default.SHM_DB_REDO_0 10000009 SHM_CONFIG default.SHM_DB_REDO_1 1000000
10 SHM_CONFIG default.SHM_DB_REDO_2 1000000
11 SHM_CONFIG default.SHM_DB_SEQUENCE 100
12 SHM_CONFIG default.tmp 1000000
13 SHM_CONFIG default.ShmPool 100
14 SHM_CONFIG default.ShmInfoPoint 100
15 SHM_CONFIG default.MessageQueue 100000
16 SHM_CONFIG default.MessageQueueEX 100000
17 SHM_CONFIG default.multimap 100
18 SHM_CONFIG default.multimap2 100
19 SHM_CONFIG default.set_group 50000000
20 SHM_CONFIG default.hash 256
21 SHM_CONFIG default.hash_D 1024
-- ---------- --------------------------- ------------------ -------共计 22 个-------------------------------------------
运行时信息:i model name runtime
- ----- ---- -------
0 测试 test 1
- ----- ---- -------共计 1 个-------------------------------------------
统计信息:i model name statistics
- ----- ----- ----------
0 测试s tests 2
- ----- ----- ----------共计 1 个[08-23 17:23:38][应用][信息][CommandSet.h : 129(doCommand)][ 0.01]
命令 ShmEnvShow 执行完毕 返回码 0
press any key to continue ... (q=exit ):
由于是多层菜单,看到“ b=break”的时候可以输入b返回上一层。
现在可以使用命令表的测试功能了。
(这里是文档结束)
