程序移植

C++程序的耦合性设计

梦想与她 提交于 2019-11-26 10:19:28
声明:本文部分采用和参考《代码里的世界观-通往架构师之路》中内容,可以说是该书中耦合性一章的读后感,感谢该书的作者余叶老师的无私分享。 1.什么是耦合? 耦合其实就是程序之间的相关性。 程序之间绝对没有相关性是不可能的,否则也不可能在一个程序中启动,如下图: 这是一个Linux中socket TCP编程的程序流程图,在图中的TCP服务器端,socket()、bind()接口、listen()接口、accept()接口之间肯定存在着相关(就是要调用下一个接口程序必需先调用前一个接口),也就是耦合,否则整个TCP服务器端就建立不起来,以及改变了bind()中的传入的数据,比如端口号,那么接下来的listen()监听的端口,accept()接收连接的端口也会改变,所以它们之间有很强的相关性,属于紧耦合。所以耦合就是代码的相关性,如果还不明白,也没关系,继续看下去,相信你会懂的,哈哈。 2.耦合的形式 (1)数据之间耦合 在同一个结构体或者类中,如: typedef struct Person { int age; char* name; }Person; class Person { private: int age_m; bool namePresent_m; std::string name_m; }; 在上面的结构体和类中,年龄和名字两个基本数据单元组合成了一个人数据单元

录音程序移植到Linux心得

孤人 提交于 2019-11-26 04:22:10
我曾经写过一篇文章 “如何实现一个voip录音系统” ,后来还描述了 持续改进的思路 ,但该程序只支持64位windows环境,现在很多主流的软交换--如常见的Asterisk、vos等--都运行在linux下,移植到Linux很有必要,很多情况下可以不用交换机镜像就进行录音。 程序是使用C/C++开发的,语言层面的移植是相对容易的,毕竟C/C++是通用编程语言,而且C++11以后的多线程库等在多个平台都是支持的。移植录音程序主要有两个外部库需要注意,一是libpcap,二是intel的IPP库。 libpcap相对简单,它和WinPcap在应用层接口方面是兼容的,应用层源代码基本不需要调整,将相关的库源代码下载编译后,在自己的应用层makefile文件上加上头文件路径-I ~/libpcap-1.9.1,再加上链接参数-lpcap即可。 Intel的IPP库是公认的高性能库,解码g729等媒体数据占用cpu极小。但ipp库安装编译链接最为头疼,ipp历史版本甚多,静态编译更加困难,详细请参考我的文章:“使用ipp静态库,ipp-samples在linux下的make过程”。 当然,更偷懒的做法是不解码,将原始媒体数据用双声道的方式写入wav文件,然后再做一个专门的客户端在查询的时候来进行解码合成,好处就不需要任何codec,因此也省去了编译使用ipp的麻烦