C/C++
文章平均质量分 78
长山互联网未来探索
一切美好事物,都是深度关系的产物。 长山是我的花名,这里和大家聊聊互联网、技术、产品、编程、心理学等我感兴趣的事情。 现在是一个新时代的开始,与你喜欢的事情,建立深度的关系,里面有新的创造。
展开
-
将成员变量声明为private——effective c++学习笔记
将成员变量声明为private(Declare data members private.)不采用public成员变量的理由:1、 语法的一致性。所有对成员的访问通过函数来进行。2、 使用函数可以让你对变量的处理有更精确的控制。3、 封装:如果使用函数访问,万一成员变量发送更改,对客户来说没有影响。封装他们可以确保class的约束条件总会获得维护,因为只有成员函数可以影响他们,也保留了日后变更的权力。 同时,protected 变量使用于上面的1和2。对于封装性,publi原创 2010-11-19 23:04:00 · 2408 阅读 · 5 评论 -
timerfd使用总结
timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景。timerfd是linux内核2.6.25版本中加入的借口。timerfd、eventfd、signalfd配合epoll使用,可以构造出一个零轮询的程序,但程序没有处理的事件时,程序是被阻塞的。这样的话在某些移动设备上程序更省电。原创 2014-03-15 20:27:16 · 29592 阅读 · 3 评论 -
SIP自动化测试工具测试脚本 DSL语法
一直有构建一个基于DSL的SIP自动化测试工具的想法。正好最近在学习DSL,顺便考虑了一下测试脚本的语法:creat userA set tel = 1002creat userB set tel = 2001userA send invite to userB set sdp_ip = 10.20.1.126, media = g711auserB recv invite from userA原创 2014-03-15 20:44:27 · 6857 阅读 · 1 评论 -
C语言中结构体的初始化
《代码大全》建议在变量定义的时候进行初始化,但是很多人,特别是新人对结构体或者结构体数组定义是一般不会初始化,或者不知道怎么初始化。1、初始化typedef struct _TEST_T { int i; char c[10];}TEST_T;TEST_T gst = {1, “12345”};//可以初始化,设置i为1,s为一个字符串.TEST_T gst = {原创 2013-03-02 21:23:12 · 95196 阅读 · 5 评论 -
如何查看进程的实际的内存占用
top命令可以查看进程内存的使用,但是不够详细。还有一些命令可以进行更加详细的查看。[root@localhost ~]# cat /proc/5606/statusName: switch4State: S (sleeping)Tgid: 5606Pid: 5606PPid: 1TracerPid: 0Uid: 0 0 0原创 2012-09-20 21:30:21 · 18228 阅读 · 0 评论 -
c初学者练习程序需求
所有程序基于linux平台。1、文件夹和目录拷贝工具制作一个工具,可以拷贝文件和目录。可以通过命令:cp filesrc filedst,将源文件filesrc复制为filedst。2、训练文件操作和字符串处理。文件读写以及字符串处理在c中应用很多。特别是字符串的拷贝,链接,查找等等。训练的题目是配置文件的读写:有一个配置文件:test.ini,格式及内容如下:#表示后面的内容是注释db_ip =原创 2012-07-16 21:37:07 · 2680 阅读 · 1 评论 -
APUE学习笔记——进程环境
在main中调用exit(1)和reutrn 1是等价的。内核启动一个进程的唯一的方法是调用exec,用户程序终止进程的唯一方法是显示或者隐式的调用_exit或者_EXIT。每个进程都会有一个进程表。进程表是一个全局的指针:environ。extern char **environ可以查看这个环境表。另外,可以通过getenv和putenv来获取修改环境表。写个程序试一下。linux的段:linu原创 2012-07-03 11:23:28 · 2678 阅读 · 0 评论 -
python协程及应用(一):简介
前言:我一直在关注如何让开发变得更容易,效率更高,更不易出错。之前做过类似的努力,结合SOA和工作流引擎做的一个流程编辑:http://blog.csdn.net/chgaowei/article/category/597366。它有它自身的缺陷:脚本和程序之间的耦合太大,脚本限制太多。后来接触并且学习Python,它简洁而强大,应该是解决这类问题的一个思路。那天看到Python自带的生成器yie原创 2012-06-21 07:53:11 · 7275 阅读 · 0 评论 -
APUE学习笔记-文件IO
1 文件I/O1、 lseek的返回值应该判断是否为0,而不是小于0。2、 偏移量可以大于文件大小。这个时候会有文件空洞。3、 可以统计程序的运行时间:用户cpu(用户态),系统cpu(内核态),墙上时间(总是将)。time –p ./execute4、 open加上标志:O_CREATE和O_EXCL可以判断文件是否存在。5、 dup和dup2可复制文件描述符。并可指定复制后原创 2012-06-10 22:12:41 · 2290 阅读 · 0 评论 -
最近技术点整理
在一个博客上看到类似会这样的文章,感觉不错。有些内容虽然不成系统,但是对自己还是很重要的,有必要总结出来。好了,开始第一篇:1、epoll相对于select的优势: 不受套接字个数的限制。select默认应该是2048,而epoll没有这个限制,他的限制在系统的内存; select每次都要创建一个列表传递给内核,而epoll则直接写到内核中。 每个套接字可以传递用户数据,这样可以方便的设置回调。2原创 2012-04-16 22:39:33 · 2470 阅读 · 0 评论 -
c语言知识点补遗
使用C很长时间,但是很难说对c的各个点都十分的透彻。虽然c不像c++那样复杂,但是还有很多叽里旮旯儿:并不是他们有多难,而是在于他们平时用的不多,或者和人的第一直觉相悖,再或者初学时经验有限理解不深根本没有记住。 下面的这些东西可能来自《c专家编程》或者网络。最近发现基础的经典的书籍常读常新,原因可能有两个: 1、随着自己经验的增长,你的认识可能会不一样,思维的方式也会有所变化,而得到的东西自然会原创 2012-04-05 22:54:12 · 2799 阅读 · 3 评论 -
新手小心:c语言的强符号和弱符号
声明:下面的实例全部在linux下尝试,window下未尝试。有兴趣者可以试一下。文章针c初学者。c语言的强符号和弱符号是c初学者经常容易犯错的地方。而且很多时候,特别是多人配合开发的程序,它引起的问题往往非常行为怪异而且难以定位。什么是强符号和弱符号?在c语言中,函数和初始化的全局变量是强符号,未初始化的全局变量时弱符号。强符号和弱符号的定义是连接器用来处理多重定义符号的,它的规则是:不允许多个原创 2012-01-03 22:25:57 · 8525 阅读 · 11 评论 -
数据驱动编程之表驱动法
本文示例代码采用的是c语言。之前介绍过数据驱动编程《什么是数据驱动编程》。里面介绍了一个简单的数据驱动手法。今天更进一步,介绍一个稍微复杂,更加实用的一点手法——表驱动法。关于表驱动法,在《unix编程艺术》中有提到,更详细的描述可以看一下《代码大全》,有一章专门进行描述(大概是第八章)。简单的表驱动:《什么是数据驱动编程》中有一个代码示例。它其实也可以看做是一种表驱动手法,只不过这个表相对比较简原创 2011-11-13 22:02:50 · 26211 阅读 · 12 评论 -
linux 程序的段学习总结
linux程序的段陆陆续续接触过一些,今天适当的总结一下,时间仓促,总结的比较零散。linux 段:text:已编译程序的机器代码。.rodata:只读数据。printf中的格式串,或者开关语句的跳转表。data:已初始化的全局变量。bss:未初始化的全局变量。symtab:符号表。注意:1、如果定义一个全局变量,int i = 0;它被初始化为0,但是,它却不是放在data段中的,而是放在bss原创 2011-11-30 22:40:42 · 2712 阅读 · 0 评论 -
在main函数之前调用函数,以及对设计的作用
前几天为新员工写一个简单的测试框架,可让他们方便的写测试用例并且执行。期间遇到一个问题就是如何让他们增加测试用例而用不影响测试框架的代码?c++的单件模式可以解决这个问题,但是其中一个难点是要在main之前注册单件。c++可以通过构造函数来实现注册,c如何注册?最后查了下资料,原原创 2011-08-16 20:02:56 · 9293 阅读 · 10 评论 -
透彻了解inline的里里外外——effective c++学习笔记
inline背后的整体观念:将“对此函数的每一次调用”都以函数本体替换之。inline在大多数c++程序中是编译器行为。inline是个申请,编译器可以忽略。inline对virtual函数的申请一般都会失败。一个表面看似inline的函数是否真实inline,取决于你的建置环境,主要取决于编译器。编译器通常不对“通过函数指针而进行的调用”实施inline。对inline函数调用有可能被inline,也可能不被inlined,取决于实施的方式。不要将Derived(子类)构造函数原创 2011-04-08 21:44:00 · 3074 阅读 · 1 评论 -
深入理解C++的动态绑定和静态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。关于对象的静态类型和动态类型,看一个示例: class B{}class C : public B{}class D : public B{}D* pD原创 2011-05-17 20:22:00 · 75928 阅读 · 168 评论 -
宁以non-member-and-non-friend替换member函数——effective c++学习笔记
宁以non-member-and-non-friend替换member函数(Prefer non-member non-friend function to member functions.)non-member-and-non-friend表示非成员且非友元。之所以这样做,是为了减少能够访问private成员的代码的数量,以此来提高封装性。 namespace的使用:1、 namespace的定义可以累加。2、 namespace既可以包含声明,也可以包含定义。3、原创 2010-11-19 23:08:00 · 3160 阅读 · 0 评论 -
FLV文件格式官方规范详解
——如果要学习一个新的知识点,官方手册可能是最快的途径。查看网上其他人的总结也许入门更快,但是要准确,深入,完整,还是要看官方手册。以下内容来自对官方文档Video File Format SpecificationVersion 10的分析总结。过程中借助ffmpeg实际转换了一个flv文件用例研究。一个FLV文件,每种类型的tag都属于一个流,也就是一个flv文件最多只有一个音频流,一个视频流原创 2016-04-25 16:41:27 · 29053 阅读 · 0 评论