摘要:
一、模板模板是C++中相对比较不太常见的结构,它实现了一些定义按照使用而动态由编译器实现的功能。或者说它部分实现了一些代码动态生成,将程序员的一些工作转移给了编译器来完成。并且它可以使用和内存的使用一样,只有在真正使用到(需要一种模板定义)的时候,此时才真正生成这种模板的一个实例。这一点和各种现代的 阅读全文
摘要:
一、虚函数表每个包含有虚函数的类都会有一个所有对象共享的虚函数表,既然是所有实例共享,那么就涉及到可能出现“三个和尚没水喝”的情况。这个虚函数表既然是大家都要使用的,那么有谁来生成呢?最为保险但是低效的办法就是每个编译单元都生成一个,变量声明为weak,放入comdat节中,最后由连接器删除重复的冗 阅读全文
摘要:
一、unix socket这种套接口感觉在文件系统和套接口中都是一种异类,就好像蝙蝠是兽中的鸟、鸟中的兽一样。它的特点在于一个地址是否被占用是通过一个文件是否存在来确定。这其实是一个比较危险的操作,因为这个文件的存在是持久性创建的文件,会给底层的文件系统造成持久的影响。现在假设说一个程序非正常结束, 阅读全文
摘要:
一、文件传输文件传输一直是互联互通以来的一个重要问题,为了这个问题,有各种的ftp实现,sz/rz模式,diff工具、以及scp等各种方法,它们各有各自的应用场景,也不能说一个就直接取代另一个。对于rsync来说,它应该算是一个比较特殊的方法,或者说在diff和scp之间有一个比较好的中和。通常来说 阅读全文
摘要:
一、粘包问题TCP传输是一种基于流(stream)的传输方式,这个流是对应于udp的数据报格式的传输方式。在数据报传输格式中,每次传输的是一个单位,可以认为他是一个离散的信号,每次发送一个报单位。而流则是细水长流的流,它的数据可以持续的发送,接收和发送端都可以认为其中的字节流是没有天然的分隔点的,不 阅读全文
摘要:
一、poll实现内核中VFS系统的poll机会是整个系统中异步等待的基础,无论是最为原始的poll,之后上流的select,以及最近的epoll,它们在内核中的实现都是基于每种文件提供一个poll接口功能来实现。但是对于内核态的poll来说,它并不是一个阻塞式的接口。它是最为接近poll英文原始意义 阅读全文
摘要:
一、进程调试主要发生在一些调试环境中,文件的编译我们可以认为比较麻烦,或者说我们并不像真正的修改源代码,因为测试的代码修改之后还要改回来;麻烦不说,如果修改之后测试代码没有改回来,那么问题就更加严重了,所以我们尽量希望通过gdb工具来环保的修改程序的行为,这样我们就可能使用到下面的一些方法和指令。二 阅读全文
摘要:
一、丢包这个丢包不是网卡级别的丢包,在每个网卡中也会显示丢失的包的数据。这个一般是由于网卡在中断处理中需要通过skbuff来存储新来的包。此时是直接通过内存管理接口申请结构,此时这个地方并没有办法做限制,因为此时的中断处理程序并不理解上层的协议,更不用说进程或者是socket这些逻辑概念。所以当网卡 阅读全文
摘要:
一、语法语法是一个语言的基础,每个语言都会形式化的定义自己的语法规则,因为现在大部分时候还是“属性文法”,也就是基于语法的语义识别,所以严格的语法对于任何一门语言都是必须的,即使所谓的第四代编程语言SQL语言看起来非常高端,但是事实上它的语法也是有严格规定的,也可以通过语法文件(好像应该叫巴克斯-诺 阅读全文
摘要:
一、unix套接字这种形式的套接字和通常的计算机间通讯不同,它是用来进行计算机内部进程间通讯的一种方式。大家比较经常接触到的进程间通讯方式可能是管道(无名和命名)、消息队列、共享内存等,可能对这个使用的比较少。那么我们可以想象一下这种通讯方式和前几种通讯方式相比,它的特殊之处在哪里?作为一个套接字, 阅读全文