Linux-IPC技术的选择
我正在构建一个应用程序,它接受一个可执行文件作为输入,执行该文件,并跟踪动态内存分配,以帮助跟踪内存错误 读取可执行文件的名称后,我创建了一个子进程,将可执行文件与我的模块(包括我的malloc函数族版本)链接,并执行用户提供的可执行文件。父进程将由一个GUI(使用QT框架)组成,我希望在其中显示警告/错误/分配数量 我需要将mallocs/free的数量和一系列警告消息实时传递给父进程。在用户应用程序完成执行后,我希望显示内存泄漏的数量。(我已经在我链接的共享库中处理了所有需要的后端编码) 实时: 我想到了两种不同的方法来传达这些信息Linux-IPC技术的选择,c,linux,ipc,C,Linux,Ipc,我正在构建一个应用程序,它接受一个可执行文件作为输入,执行该文件,并跟踪动态内存分配,以帮助跟踪内存错误 读取可执行文件的名称后,我创建了一个子进程,将可执行文件与我的模块(包括我的malloc函数族版本)链接,并执行用户提供的可执行文件。父进程将由一个GUI(使用QT框架)组成,我希望在其中显示警告/错误/分配数量 我需要将mallocs/free的数量和一系列警告消息实时传递给父进程。在用户应用程序完成执行后,我希望显示内存泄漏的数量。(我已经在我链接的共享库中处理了所有需要的后端编码) 实
感谢您的时间我建议您使用unix域套接字,它比管道灵活一点,可以配置为数据报模式,这样您就不必查找消息边界,并且以后可以很容易地移动到网络接口。信号绝对不是实现这一点的方法。一般来说,尽可能避免使用信号
管道解决方案很好。您也可以使用共享内存,但这更容易被目标应用程序意外损坏。我建议将共享内存和套接字结合使用。拥有一个共享内存区域,比如1MB,并将所有信息以某种标准格式记录在该缓冲区中。如果缓冲区已满或进程终止,则通过套接字向读卡器发送消息。读卡器确认后,您可以清除缓冲区并继续 要回答caf对目标应用程序损坏的担忧,只需使用系统调用从共享内存区域删除权限(set
PROT_NONE
),然后再控制目标进程。当然,这意味着您必须在每次分配更新日志之前设置PROT_READ | PROT_WRITE
,不确定这是否是抛出mprotect
调用的性能胜利
编辑:如果不太明显,您可以有多个缓冲区(或一个分为N部分),这样您就可以立即将控制权传递回目标进程,而不必等待读卡器确认。此外,如果有足够的计算资源,读卡器可以根据需要随时运行,读取当前活动的缓冲区,并对用户执行实时更新,或者执行任何读取操作。我敢问,你这样做是为了什么?(只是感兴趣)这是我的本科毕业设计,我可以把它标记为家庭作业吗?不,我只是好奇,如果你把它标记为家庭作业,你真的只会得到一堆参考资料,而不是你可能真正需要的代码片段的帮助。