我的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= 1
0 = 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= 1
0 = 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= 1
0 = 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/etc
1 SHM_CONFIG default.SHM_DB_TABLE_DEF 100
2 SHM_CONFIG default.SHM_DB_COLUMN_DEF 100
3 SHM_CONFIG default.SHM_DB_INDEX_DEF 100
4 SHM_CONFIG default.SHM_DB_STRING_POOL 1000000
5 SHM_CONFIG default.SHM_DB_STRING_POOL# 1000000
6 SHM_CONFIG default.SHM_DB_DATA 10000
7 SHM_CONFIG default.SHM_DB_INDEX 10000
8 SHM_CONFIG default.SHM_DB_REDO_0 1000000
9 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返回上一层。
现在可以使用命令表的测试功能了。
(这里是文档结束)